Coverage Report

Created: 2025-07-18 06:09

/src/cpython/Parser/parser.c
Line
Count
Source (jump to first uncovered line)
1
// @generated by pegen from python.gram
2
#include "pegen.h"
3
4
#if defined(Py_DEBUG) && defined(Py_BUILD_CORE)
5
#  define D(x) if (p->debug) { x; }
6
#else
7
#  define D(x)
8
#endif
9
10
#ifdef __wasi__
11
#  ifdef Py_DEBUG
12
#    define MAXSTACK 1000
13
#  else
14
#    define MAXSTACK 4000
15
#  endif
16
#else
17
154M
#  define MAXSTACK 6000
18
#endif
19
static const int n_keyword_lists = 9;
20
static KeywordToken *reserved_keywords[] = {
21
    (KeywordToken[]) {{NULL, -1}},
22
    (KeywordToken[]) {{NULL, -1}},
23
    (KeywordToken[]) {
24
        {"if", 687},
25
        {"as", 685},
26
        {"in", 700},
27
        {"or", 589},
28
        {"is", 597},
29
        {NULL, -1},
30
    },
31
    (KeywordToken[]) {
32
        {"del", 630},
33
        {"def", 704},
34
        {"for", 699},
35
        {"try", 661},
36
        {"and", 590},
37
        {"not", 708},
38
        {NULL, -1},
39
    },
40
    (KeywordToken[]) {
41
        {"from", 638},
42
        {"pass", 527},
43
        {"with", 652},
44
        {"elif", 692},
45
        {"else", 691},
46
        {"None", 624},
47
        {"True", 623},
48
        {NULL, -1},
49
    },
50
    (KeywordToken[]) {
51
        {"raise", 628},
52
        {"yield", 588},
53
        {"break", 528},
54
        {"async", 703},
55
        {"class", 706},
56
        {"while", 694},
57
        {"False", 625},
58
        {"await", 598},
59
        {NULL, -1},
60
    },
61
    (KeywordToken[]) {
62
        {"return", 522},
63
        {"import", 639},
64
        {"assert", 533},
65
        {"global", 530},
66
        {"except", 682},
67
        {"lambda", 622},
68
        {NULL, -1},
69
    },
70
    (KeywordToken[]) {
71
        {"finally", 678},
72
        {NULL, -1},
73
    },
74
    (KeywordToken[]) {
75
        {"continue", 529},
76
        {"nonlocal", 531},
77
        {NULL, -1},
78
    },
79
};
80
static char *soft_keywords[] = {
81
    "_",
82
    "case",
83
    "match",
84
    "type",
85
    NULL,
86
};
87
#define file_type 1000
88
#define interactive_type 1001
89
#define eval_type 1002
90
#define func_type_type 1003
91
#define statements_type 1004
92
#define statement_type 1005
93
#define single_compound_stmt_type 1006
94
#define statement_newline_type 1007
95
#define simple_stmts_type 1008
96
384k
#define simple_stmt_type 1009
97
#define compound_stmt_type 1010
98
#define assignment_type 1011
99
#define annotated_rhs_type 1012
100
#define augassign_type 1013
101
#define return_stmt_type 1014
102
#define raise_stmt_type 1015
103
#define pass_stmt_type 1016
104
#define break_stmt_type 1017
105
#define continue_stmt_type 1018
106
#define global_stmt_type 1019
107
#define nonlocal_stmt_type 1020
108
#define del_stmt_type 1021
109
#define yield_stmt_type 1022
110
#define assert_stmt_type 1023
111
#define import_stmt_type 1024
112
#define import_name_type 1025
113
#define import_from_type 1026
114
#define import_from_targets_type 1027
115
#define import_from_as_names_type 1028
116
#define import_from_as_name_type 1029
117
#define dotted_as_names_type 1030
118
#define dotted_as_name_type 1031
119
54.3k
#define dotted_name_type 1032  // Left-recursive
120
120k
#define block_type 1033
121
#define decorators_type 1034
122
#define class_def_type 1035
123
#define class_def_raw_type 1036
124
#define function_def_type 1037
125
#define function_def_raw_type 1038
126
#define params_type 1039
127
#define parameters_type 1040
128
#define slash_no_default_type 1041
129
#define slash_with_default_type 1042
130
#define star_etc_type 1043
131
#define kwds_type 1044
132
#define param_no_default_type 1045
133
#define param_no_default_star_annotation_type 1046
134
#define param_with_default_type 1047
135
#define param_maybe_default_type 1048
136
#define param_type 1049
137
#define param_star_annotation_type 1050
138
#define annotation_type 1051
139
#define star_annotation_type 1052
140
#define default_type 1053
141
#define if_stmt_type 1054
142
#define elif_stmt_type 1055
143
#define else_block_type 1056
144
#define while_stmt_type 1057
145
#define for_stmt_type 1058
146
#define with_stmt_type 1059
147
#define with_item_type 1060
148
#define try_stmt_type 1061
149
#define except_block_type 1062
150
#define except_star_block_type 1063
151
#define finally_block_type 1064
152
#define match_stmt_type 1065
153
#define subject_expr_type 1066
154
#define case_block_type 1067
155
#define guard_type 1068
156
#define patterns_type 1069
157
#define pattern_type 1070
158
#define as_pattern_type 1071
159
#define or_pattern_type 1072
160
300k
#define closed_pattern_type 1073
161
#define literal_pattern_type 1074
162
#define literal_expr_type 1075
163
#define complex_number_type 1076
164
#define signed_number_type 1077
165
#define signed_real_number_type 1078
166
#define real_number_type 1079
167
#define imaginary_number_type 1080
168
#define capture_pattern_type 1081
169
#define pattern_capture_target_type 1082
170
#define wildcard_pattern_type 1083
171
#define value_pattern_type 1084
172
157k
#define attr_type 1085  // Left-recursive
173
#define name_or_attr_type 1086  // Left-recursive
174
#define group_pattern_type 1087
175
#define sequence_pattern_type 1088
176
#define open_sequence_pattern_type 1089
177
#define maybe_sequence_pattern_type 1090
178
#define maybe_star_pattern_type 1091
179
53.4k
#define star_pattern_type 1092
180
#define mapping_pattern_type 1093
181
#define items_pattern_type 1094
182
#define key_value_pattern_type 1095
183
#define double_star_pattern_type 1096
184
#define class_pattern_type 1097
185
#define positional_patterns_type 1098
186
#define keyword_patterns_type 1099
187
#define keyword_pattern_type 1100
188
#define type_alias_type 1101
189
#define type_params_type 1102
190
#define type_param_seq_type 1103
191
20.7k
#define type_param_type 1104
192
#define type_param_bound_type 1105
193
#define type_param_default_type 1106
194
#define type_param_starred_default_type 1107
195
#define expressions_type 1108
196
2.18M
#define expression_type 1109
197
#define yield_expr_type 1110
198
#define star_expressions_type 1111
199
1.27M
#define star_expression_type 1112
200
#define star_named_expressions_type 1113
201
#define star_named_expression_type 1114
202
#define assignment_expression_type 1115
203
#define named_expression_type 1116
204
2.44M
#define disjunction_type 1117
205
1.83M
#define conjunction_type 1118
206
1.87M
#define inversion_type 1119
207
#define comparison_type 1120
208
#define compare_op_bitwise_or_pair_type 1121
209
#define eq_bitwise_or_type 1122
210
#define noteq_bitwise_or_type 1123
211
#define lte_bitwise_or_type 1124
212
#define lt_bitwise_or_type 1125
213
#define gte_bitwise_or_type 1126
214
#define gt_bitwise_or_type 1127
215
#define notin_bitwise_or_type 1128
216
#define in_bitwise_or_type 1129
217
#define isnot_bitwise_or_type 1130
218
#define is_bitwise_or_type 1131
219
3.44M
#define bitwise_or_type 1132  // Left-recursive
220
3.16M
#define bitwise_xor_type 1133  // Left-recursive
221
3.17M
#define bitwise_and_type 1134  // Left-recursive
222
4.24M
#define shift_expr_type 1135  // Left-recursive
223
4.56M
#define sum_type 1136  // Left-recursive
224
7.83M
#define term_type 1137  // Left-recursive
225
2.29M
#define factor_type 1138
226
#define power_type 1139
227
2.13M
#define await_primary_type 1140
228
6.69M
#define primary_type 1141  // Left-recursive
229
#define slices_type 1142
230
#define slice_type 1143
231
#define atom_type 1144
232
#define group_type 1145
233
#define lambdef_type 1146
234
#define lambda_params_type 1147
235
#define lambda_parameters_type 1148
236
#define lambda_slash_no_default_type 1149
237
#define lambda_slash_with_default_type 1150
238
#define lambda_star_etc_type 1151
239
#define lambda_kwds_type 1152
240
#define lambda_param_no_default_type 1153
241
#define lambda_param_with_default_type 1154
242
#define lambda_param_maybe_default_type 1155
243
#define lambda_param_type 1156
244
#define fstring_middle_type 1157
245
#define fstring_replacement_field_type 1158
246
#define fstring_conversion_type 1159
247
#define fstring_full_format_spec_type 1160
248
#define fstring_format_spec_type 1161
249
#define fstring_type 1162
250
#define tstring_format_spec_replacement_field_type 1163
251
#define tstring_format_spec_type 1164
252
#define tstring_full_format_spec_type 1165
253
#define tstring_replacement_field_type 1166
254
#define tstring_middle_type 1167
255
196k
#define tstring_type 1168
256
#define string_type 1169
257
254k
#define strings_type 1170
258
#define list_type 1171
259
#define tuple_type 1172
260
#define set_type 1173
261
#define dict_type 1174
262
#define double_starred_kvpairs_type 1175
263
#define double_starred_kvpair_type 1176
264
#define kvpair_type 1177
265
#define for_if_clauses_type 1178
266
#define for_if_clause_type 1179
267
#define listcomp_type 1180
268
#define setcomp_type 1181
269
#define genexp_type 1182
270
#define dictcomp_type 1183
271
100k
#define arguments_type 1184
272
#define args_type 1185
273
#define kwargs_type 1186
274
#define starred_expression_type 1187
275
#define kwarg_or_starred_type 1188
276
#define kwarg_or_double_starred_type 1189
277
#define star_targets_type 1190
278
#define star_targets_list_seq_type 1191
279
#define star_targets_tuple_seq_type 1192
280
697k
#define star_target_type 1193
281
469k
#define target_with_star_atom_type 1194
282
#define star_atom_type 1195
283
#define single_target_type 1196
284
#define single_subscript_attribute_target_type 1197
285
2.49M
#define t_primary_type 1198  // Left-recursive
286
#define t_lookahead_type 1199
287
#define del_targets_type 1200
288
21.4k
#define del_target_type 1201
289
#define del_t_atom_type 1202
290
#define type_expressions_type 1203
291
#define func_type_comment_type 1204
292
#define invalid_arguments_type 1205
293
#define invalid_kwarg_type 1206
294
#define expression_without_invalid_type 1207
295
#define invalid_legacy_expression_type 1208
296
#define invalid_type_param_type 1209
297
#define invalid_expression_type 1210
298
305k
#define invalid_named_expression_type 1211
299
#define invalid_assignment_type 1212
300
#define invalid_ann_assign_target_type 1213
301
#define invalid_raise_stmt_type 1214
302
#define invalid_del_stmt_type 1215
303
#define invalid_block_type 1216
304
#define invalid_comprehension_type 1217
305
#define invalid_dict_comprehension_type 1218
306
#define invalid_parameters_type 1219
307
#define invalid_default_type 1220
308
#define invalid_star_etc_type 1221
309
#define invalid_kwds_type 1222
310
#define invalid_parameters_helper_type 1223
311
#define invalid_lambda_parameters_type 1224
312
#define invalid_lambda_parameters_helper_type 1225
313
#define invalid_lambda_star_etc_type 1226
314
#define invalid_lambda_kwds_type 1227
315
#define invalid_double_type_comments_type 1228
316
#define invalid_with_item_type 1229
317
#define invalid_for_if_clause_type 1230
318
#define invalid_for_target_type 1231
319
#define invalid_group_type 1232
320
#define invalid_import_type 1233
321
#define invalid_dotted_as_name_type 1234
322
#define invalid_import_from_as_name_type 1235
323
#define invalid_import_from_targets_type 1236
324
#define invalid_with_stmt_type 1237
325
#define invalid_with_stmt_indent_type 1238
326
#define invalid_try_stmt_type 1239
327
#define invalid_except_stmt_type 1240
328
#define invalid_except_star_stmt_type 1241
329
#define invalid_finally_stmt_type 1242
330
#define invalid_except_stmt_indent_type 1243
331
#define invalid_except_star_stmt_indent_type 1244
332
#define invalid_match_stmt_type 1245
333
#define invalid_case_block_type 1246
334
#define invalid_as_pattern_type 1247
335
#define invalid_class_pattern_type 1248
336
#define invalid_class_argument_pattern_type 1249
337
#define invalid_if_stmt_type 1250
338
#define invalid_elif_stmt_type 1251
339
#define invalid_else_stmt_type 1252
340
#define invalid_while_stmt_type 1253
341
#define invalid_for_stmt_type 1254
342
#define invalid_def_raw_type 1255
343
#define invalid_class_def_raw_type 1256
344
#define invalid_double_starred_kvpairs_type 1257
345
#define invalid_kvpair_type 1258
346
#define invalid_starred_expression_unpacking_type 1259
347
#define invalid_starred_expression_type 1260
348
#define invalid_fstring_replacement_field_type 1261
349
#define invalid_fstring_conversion_character_type 1262
350
#define invalid_tstring_replacement_field_type 1263
351
#define invalid_tstring_conversion_character_type 1264
352
#define invalid_arithmetic_type 1265
353
#define invalid_factor_type 1266
354
#define invalid_type_params_type 1267
355
#define _loop0_1_type 1268
356
#define _loop1_2_type 1269
357
#define _loop0_3_type 1270
358
#define _gather_4_type 1271
359
#define _tmp_5_type 1272
360
#define _tmp_6_type 1273
361
#define _tmp_7_type 1274
362
#define _tmp_8_type 1275
363
#define _tmp_9_type 1276
364
#define _tmp_10_type 1277
365
#define _tmp_11_type 1278
366
#define _loop1_12_type 1279
367
#define _loop0_13_type 1280
368
#define _gather_14_type 1281
369
#define _tmp_15_type 1282
370
#define _tmp_16_type 1283
371
#define _loop0_17_type 1284
372
#define _loop1_18_type 1285
373
#define _loop0_19_type 1286
374
#define _gather_20_type 1287
375
#define _tmp_21_type 1288
376
#define _loop0_22_type 1289
377
#define _gather_23_type 1290
378
#define _loop1_24_type 1291
379
#define _tmp_25_type 1292
380
#define _tmp_26_type 1293
381
#define _loop0_27_type 1294
382
#define _loop0_28_type 1295
383
#define _loop1_29_type 1296
384
#define _loop1_30_type 1297
385
#define _loop0_31_type 1298
386
#define _loop1_32_type 1299
387
#define _loop0_33_type 1300
388
#define _gather_34_type 1301
389
#define _tmp_35_type 1302
390
#define _loop1_36_type 1303
391
#define _loop1_37_type 1304
392
#define _loop1_38_type 1305
393
#define _loop0_39_type 1306
394
#define _gather_40_type 1307
395
#define _tmp_41_type 1308
396
#define _tmp_42_type 1309
397
#define _tmp_43_type 1310
398
#define _loop0_44_type 1311
399
#define _gather_45_type 1312
400
#define _loop0_46_type 1313
401
#define _gather_47_type 1314
402
#define _tmp_48_type 1315
403
#define _loop0_49_type 1316
404
#define _gather_50_type 1317
405
#define _loop0_51_type 1318
406
#define _gather_52_type 1319
407
#define _loop0_53_type 1320
408
#define _gather_54_type 1321
409
#define _loop1_55_type 1322
410
#define _loop1_56_type 1323
411
#define _loop0_57_type 1324
412
#define _gather_58_type 1325
413
#define _loop1_59_type 1326
414
#define _loop1_60_type 1327
415
#define _loop1_61_type 1328
416
#define _tmp_62_type 1329
417
#define _loop0_63_type 1330
418
#define _gather_64_type 1331
419
#define _tmp_65_type 1332
420
#define _tmp_66_type 1333
421
#define _tmp_67_type 1334
422
#define _tmp_68_type 1335
423
#define _tmp_69_type 1336
424
#define _loop0_70_type 1337
425
#define _loop0_71_type 1338
426
#define _loop1_72_type 1339
427
#define _loop1_73_type 1340
428
#define _loop0_74_type 1341
429
#define _loop1_75_type 1342
430
#define _loop0_76_type 1343
431
#define _loop0_77_type 1344
432
#define _loop0_78_type 1345
433
#define _loop0_79_type 1346
434
#define _loop1_80_type 1347
435
#define _tmp_81_type 1348
436
#define _loop0_82_type 1349
437
#define _gather_83_type 1350
438
#define _loop1_84_type 1351
439
#define _loop0_85_type 1352
440
#define _tmp_86_type 1353
441
#define _loop0_87_type 1354
442
#define _gather_88_type 1355
443
#define _tmp_89_type 1356
444
#define _loop0_90_type 1357
445
#define _gather_91_type 1358
446
#define _loop0_92_type 1359
447
#define _gather_93_type 1360
448
#define _loop0_94_type 1361
449
#define _loop0_95_type 1362
450
#define _gather_96_type 1363
451
#define _loop1_97_type 1364
452
#define _tmp_98_type 1365
453
#define _loop0_99_type 1366
454
#define _gather_100_type 1367
455
#define _loop0_101_type 1368
456
#define _gather_102_type 1369
457
#define _tmp_103_type 1370
458
#define _tmp_104_type 1371
459
#define _loop0_105_type 1372
460
#define _gather_106_type 1373
461
#define _tmp_107_type 1374
462
#define _tmp_108_type 1375
463
#define _tmp_109_type 1376
464
#define _tmp_110_type 1377
465
#define _tmp_111_type 1378
466
#define _loop1_112_type 1379
467
#define _tmp_113_type 1380
468
#define _tmp_114_type 1381
469
#define _tmp_115_type 1382
470
#define _tmp_116_type 1383
471
#define _tmp_117_type 1384
472
#define _loop0_118_type 1385
473
#define _loop0_119_type 1386
474
#define _tmp_120_type 1387
475
#define _tmp_121_type 1388
476
#define _tmp_122_type 1389
477
#define _tmp_123_type 1390
478
#define _tmp_124_type 1391
479
#define _tmp_125_type 1392
480
#define _tmp_126_type 1393
481
#define _tmp_127_type 1394
482
#define _tmp_128_type 1395
483
#define _loop0_129_type 1396
484
#define _gather_130_type 1397
485
#define _tmp_131_type 1398
486
#define _tmp_132_type 1399
487
#define _tmp_133_type 1400
488
#define _tmp_134_type 1401
489
#define _loop0_135_type 1402
490
#define _gather_136_type 1403
491
#define _tmp_137_type 1404
492
#define _loop0_138_type 1405
493
#define _gather_139_type 1406
494
#define _loop0_140_type 1407
495
#define _gather_141_type 1408
496
#define _tmp_142_type 1409
497
#define _loop0_143_type 1410
498
#define _tmp_144_type 1411
499
#define _tmp_145_type 1412
500
#define _tmp_146_type 1413
501
#define _tmp_147_type 1414
502
#define _tmp_148_type 1415
503
#define _tmp_149_type 1416
504
#define _tmp_150_type 1417
505
#define _tmp_151_type 1418
506
#define _tmp_152_type 1419
507
#define _tmp_153_type 1420
508
#define _tmp_154_type 1421
509
#define _tmp_155_type 1422
510
#define _tmp_156_type 1423
511
#define _tmp_157_type 1424
512
#define _tmp_158_type 1425
513
#define _tmp_159_type 1426
514
#define _tmp_160_type 1427
515
#define _tmp_161_type 1428
516
#define _tmp_162_type 1429
517
#define _tmp_163_type 1430
518
#define _tmp_164_type 1431
519
#define _tmp_165_type 1432
520
#define _tmp_166_type 1433
521
#define _tmp_167_type 1434
522
#define _tmp_168_type 1435
523
#define _tmp_169_type 1436
524
#define _loop0_170_type 1437
525
#define _tmp_171_type 1438
526
#define _tmp_172_type 1439
527
#define _tmp_173_type 1440
528
#define _tmp_174_type 1441
529
#define _tmp_175_type 1442
530
531
static mod_ty file_rule(Parser *p);
532
static mod_ty interactive_rule(Parser *p);
533
static mod_ty eval_rule(Parser *p);
534
static mod_ty func_type_rule(Parser *p);
535
static asdl_stmt_seq* statements_rule(Parser *p);
536
static asdl_stmt_seq* statement_rule(Parser *p);
537
static asdl_stmt_seq* single_compound_stmt_rule(Parser *p);
538
static asdl_stmt_seq* statement_newline_rule(Parser *p);
539
static asdl_stmt_seq* simple_stmts_rule(Parser *p);
540
static stmt_ty simple_stmt_rule(Parser *p);
541
static stmt_ty compound_stmt_rule(Parser *p);
542
static stmt_ty assignment_rule(Parser *p);
543
static expr_ty annotated_rhs_rule(Parser *p);
544
static AugOperator* augassign_rule(Parser *p);
545
static stmt_ty return_stmt_rule(Parser *p);
546
static stmt_ty raise_stmt_rule(Parser *p);
547
static stmt_ty pass_stmt_rule(Parser *p);
548
static stmt_ty break_stmt_rule(Parser *p);
549
static stmt_ty continue_stmt_rule(Parser *p);
550
static stmt_ty global_stmt_rule(Parser *p);
551
static stmt_ty nonlocal_stmt_rule(Parser *p);
552
static stmt_ty del_stmt_rule(Parser *p);
553
static stmt_ty yield_stmt_rule(Parser *p);
554
static stmt_ty assert_stmt_rule(Parser *p);
555
static stmt_ty import_stmt_rule(Parser *p);
556
static stmt_ty import_name_rule(Parser *p);
557
static stmt_ty import_from_rule(Parser *p);
558
static asdl_alias_seq* import_from_targets_rule(Parser *p);
559
static asdl_alias_seq* import_from_as_names_rule(Parser *p);
560
static alias_ty import_from_as_name_rule(Parser *p);
561
static asdl_alias_seq* dotted_as_names_rule(Parser *p);
562
static alias_ty dotted_as_name_rule(Parser *p);
563
static expr_ty dotted_name_rule(Parser *p);
564
static asdl_stmt_seq* block_rule(Parser *p);
565
static asdl_expr_seq* decorators_rule(Parser *p);
566
static stmt_ty class_def_rule(Parser *p);
567
static stmt_ty class_def_raw_rule(Parser *p);
568
static stmt_ty function_def_rule(Parser *p);
569
static stmt_ty function_def_raw_rule(Parser *p);
570
static arguments_ty params_rule(Parser *p);
571
static arguments_ty parameters_rule(Parser *p);
572
static asdl_arg_seq* slash_no_default_rule(Parser *p);
573
static SlashWithDefault* slash_with_default_rule(Parser *p);
574
static StarEtc* star_etc_rule(Parser *p);
575
static arg_ty kwds_rule(Parser *p);
576
static arg_ty param_no_default_rule(Parser *p);
577
static arg_ty param_no_default_star_annotation_rule(Parser *p);
578
static NameDefaultPair* param_with_default_rule(Parser *p);
579
static NameDefaultPair* param_maybe_default_rule(Parser *p);
580
static arg_ty param_rule(Parser *p);
581
static arg_ty param_star_annotation_rule(Parser *p);
582
static expr_ty annotation_rule(Parser *p);
583
static expr_ty star_annotation_rule(Parser *p);
584
static expr_ty default_rule(Parser *p);
585
static stmt_ty if_stmt_rule(Parser *p);
586
static stmt_ty elif_stmt_rule(Parser *p);
587
static asdl_stmt_seq* else_block_rule(Parser *p);
588
static stmt_ty while_stmt_rule(Parser *p);
589
static stmt_ty for_stmt_rule(Parser *p);
590
static stmt_ty with_stmt_rule(Parser *p);
591
static withitem_ty with_item_rule(Parser *p);
592
static stmt_ty try_stmt_rule(Parser *p);
593
static excepthandler_ty except_block_rule(Parser *p);
594
static excepthandler_ty except_star_block_rule(Parser *p);
595
static asdl_stmt_seq* finally_block_rule(Parser *p);
596
static stmt_ty match_stmt_rule(Parser *p);
597
static expr_ty subject_expr_rule(Parser *p);
598
static match_case_ty case_block_rule(Parser *p);
599
static expr_ty guard_rule(Parser *p);
600
static pattern_ty patterns_rule(Parser *p);
601
static pattern_ty pattern_rule(Parser *p);
602
static pattern_ty as_pattern_rule(Parser *p);
603
static pattern_ty or_pattern_rule(Parser *p);
604
static pattern_ty closed_pattern_rule(Parser *p);
605
static pattern_ty literal_pattern_rule(Parser *p);
606
static expr_ty literal_expr_rule(Parser *p);
607
static expr_ty complex_number_rule(Parser *p);
608
static expr_ty signed_number_rule(Parser *p);
609
static expr_ty signed_real_number_rule(Parser *p);
610
static expr_ty real_number_rule(Parser *p);
611
static expr_ty imaginary_number_rule(Parser *p);
612
static pattern_ty capture_pattern_rule(Parser *p);
613
static expr_ty pattern_capture_target_rule(Parser *p);
614
static pattern_ty wildcard_pattern_rule(Parser *p);
615
static pattern_ty value_pattern_rule(Parser *p);
616
static expr_ty attr_rule(Parser *p);
617
static expr_ty name_or_attr_rule(Parser *p);
618
static pattern_ty group_pattern_rule(Parser *p);
619
static pattern_ty sequence_pattern_rule(Parser *p);
620
static asdl_seq* open_sequence_pattern_rule(Parser *p);
621
static asdl_seq* maybe_sequence_pattern_rule(Parser *p);
622
static pattern_ty maybe_star_pattern_rule(Parser *p);
623
static pattern_ty star_pattern_rule(Parser *p);
624
static pattern_ty mapping_pattern_rule(Parser *p);
625
static asdl_seq* items_pattern_rule(Parser *p);
626
static KeyPatternPair* key_value_pattern_rule(Parser *p);
627
static expr_ty double_star_pattern_rule(Parser *p);
628
static pattern_ty class_pattern_rule(Parser *p);
629
static asdl_pattern_seq* positional_patterns_rule(Parser *p);
630
static asdl_seq* keyword_patterns_rule(Parser *p);
631
static KeyPatternPair* keyword_pattern_rule(Parser *p);
632
static stmt_ty type_alias_rule(Parser *p);
633
static asdl_type_param_seq* type_params_rule(Parser *p);
634
static asdl_type_param_seq* type_param_seq_rule(Parser *p);
635
static type_param_ty type_param_rule(Parser *p);
636
static expr_ty type_param_bound_rule(Parser *p);
637
static expr_ty type_param_default_rule(Parser *p);
638
static expr_ty type_param_starred_default_rule(Parser *p);
639
static expr_ty expressions_rule(Parser *p);
640
static expr_ty expression_rule(Parser *p);
641
static expr_ty yield_expr_rule(Parser *p);
642
static expr_ty star_expressions_rule(Parser *p);
643
static expr_ty star_expression_rule(Parser *p);
644
static asdl_expr_seq* star_named_expressions_rule(Parser *p);
645
static expr_ty star_named_expression_rule(Parser *p);
646
static expr_ty assignment_expression_rule(Parser *p);
647
static expr_ty named_expression_rule(Parser *p);
648
static expr_ty disjunction_rule(Parser *p);
649
static expr_ty conjunction_rule(Parser *p);
650
static expr_ty inversion_rule(Parser *p);
651
static expr_ty comparison_rule(Parser *p);
652
static CmpopExprPair* compare_op_bitwise_or_pair_rule(Parser *p);
653
static CmpopExprPair* eq_bitwise_or_rule(Parser *p);
654
static CmpopExprPair* noteq_bitwise_or_rule(Parser *p);
655
static CmpopExprPair* lte_bitwise_or_rule(Parser *p);
656
static CmpopExprPair* lt_bitwise_or_rule(Parser *p);
657
static CmpopExprPair* gte_bitwise_or_rule(Parser *p);
658
static CmpopExprPair* gt_bitwise_or_rule(Parser *p);
659
static CmpopExprPair* notin_bitwise_or_rule(Parser *p);
660
static CmpopExprPair* in_bitwise_or_rule(Parser *p);
661
static CmpopExprPair* isnot_bitwise_or_rule(Parser *p);
662
static CmpopExprPair* is_bitwise_or_rule(Parser *p);
663
static expr_ty bitwise_or_rule(Parser *p);
664
static expr_ty bitwise_xor_rule(Parser *p);
665
static expr_ty bitwise_and_rule(Parser *p);
666
static expr_ty shift_expr_rule(Parser *p);
667
static expr_ty sum_rule(Parser *p);
668
static expr_ty term_rule(Parser *p);
669
static expr_ty factor_rule(Parser *p);
670
static expr_ty power_rule(Parser *p);
671
static expr_ty await_primary_rule(Parser *p);
672
static expr_ty primary_rule(Parser *p);
673
static expr_ty slices_rule(Parser *p);
674
static expr_ty slice_rule(Parser *p);
675
static expr_ty atom_rule(Parser *p);
676
static expr_ty group_rule(Parser *p);
677
static expr_ty lambdef_rule(Parser *p);
678
static arguments_ty lambda_params_rule(Parser *p);
679
static arguments_ty lambda_parameters_rule(Parser *p);
680
static asdl_arg_seq* lambda_slash_no_default_rule(Parser *p);
681
static SlashWithDefault* lambda_slash_with_default_rule(Parser *p);
682
static StarEtc* lambda_star_etc_rule(Parser *p);
683
static arg_ty lambda_kwds_rule(Parser *p);
684
static arg_ty lambda_param_no_default_rule(Parser *p);
685
static NameDefaultPair* lambda_param_with_default_rule(Parser *p);
686
static NameDefaultPair* lambda_param_maybe_default_rule(Parser *p);
687
static arg_ty lambda_param_rule(Parser *p);
688
static expr_ty fstring_middle_rule(Parser *p);
689
static expr_ty fstring_replacement_field_rule(Parser *p);
690
static ResultTokenWithMetadata* fstring_conversion_rule(Parser *p);
691
static ResultTokenWithMetadata* fstring_full_format_spec_rule(Parser *p);
692
static expr_ty fstring_format_spec_rule(Parser *p);
693
static expr_ty fstring_rule(Parser *p);
694
static expr_ty tstring_format_spec_replacement_field_rule(Parser *p);
695
static expr_ty tstring_format_spec_rule(Parser *p);
696
static ResultTokenWithMetadata* tstring_full_format_spec_rule(Parser *p);
697
static expr_ty tstring_replacement_field_rule(Parser *p);
698
static expr_ty tstring_middle_rule(Parser *p);
699
static expr_ty tstring_rule(Parser *p);
700
static expr_ty string_rule(Parser *p);
701
static expr_ty strings_rule(Parser *p);
702
static expr_ty list_rule(Parser *p);
703
static expr_ty tuple_rule(Parser *p);
704
static expr_ty set_rule(Parser *p);
705
static expr_ty dict_rule(Parser *p);
706
static asdl_seq* double_starred_kvpairs_rule(Parser *p);
707
static KeyValuePair* double_starred_kvpair_rule(Parser *p);
708
static KeyValuePair* kvpair_rule(Parser *p);
709
static asdl_comprehension_seq* for_if_clauses_rule(Parser *p);
710
static comprehension_ty for_if_clause_rule(Parser *p);
711
static expr_ty listcomp_rule(Parser *p);
712
static expr_ty setcomp_rule(Parser *p);
713
static expr_ty genexp_rule(Parser *p);
714
static expr_ty dictcomp_rule(Parser *p);
715
static expr_ty arguments_rule(Parser *p);
716
static expr_ty args_rule(Parser *p);
717
static asdl_seq* kwargs_rule(Parser *p);
718
static expr_ty starred_expression_rule(Parser *p);
719
static KeywordOrStarred* kwarg_or_starred_rule(Parser *p);
720
static KeywordOrStarred* kwarg_or_double_starred_rule(Parser *p);
721
static expr_ty star_targets_rule(Parser *p);
722
static asdl_expr_seq* star_targets_list_seq_rule(Parser *p);
723
static asdl_expr_seq* star_targets_tuple_seq_rule(Parser *p);
724
static expr_ty star_target_rule(Parser *p);
725
static expr_ty target_with_star_atom_rule(Parser *p);
726
static expr_ty star_atom_rule(Parser *p);
727
static expr_ty single_target_rule(Parser *p);
728
static expr_ty single_subscript_attribute_target_rule(Parser *p);
729
static expr_ty t_primary_rule(Parser *p);
730
static void *t_lookahead_rule(Parser *p);
731
static asdl_expr_seq* del_targets_rule(Parser *p);
732
static expr_ty del_target_rule(Parser *p);
733
static expr_ty del_t_atom_rule(Parser *p);
734
static asdl_expr_seq* type_expressions_rule(Parser *p);
735
static Token* func_type_comment_rule(Parser *p);
736
static void *invalid_arguments_rule(Parser *p);
737
static void *invalid_kwarg_rule(Parser *p);
738
static expr_ty expression_without_invalid_rule(Parser *p);
739
static void *invalid_legacy_expression_rule(Parser *p);
740
static void *invalid_type_param_rule(Parser *p);
741
static void *invalid_expression_rule(Parser *p);
742
static void *invalid_named_expression_rule(Parser *p);
743
static void *invalid_assignment_rule(Parser *p);
744
static expr_ty invalid_ann_assign_target_rule(Parser *p);
745
static void *invalid_raise_stmt_rule(Parser *p);
746
static void *invalid_del_stmt_rule(Parser *p);
747
static void *invalid_block_rule(Parser *p);
748
static void *invalid_comprehension_rule(Parser *p);
749
static void *invalid_dict_comprehension_rule(Parser *p);
750
static void *invalid_parameters_rule(Parser *p);
751
static void *invalid_default_rule(Parser *p);
752
static void *invalid_star_etc_rule(Parser *p);
753
static void *invalid_kwds_rule(Parser *p);
754
static void *invalid_parameters_helper_rule(Parser *p);
755
static void *invalid_lambda_parameters_rule(Parser *p);
756
static void *invalid_lambda_parameters_helper_rule(Parser *p);
757
static void *invalid_lambda_star_etc_rule(Parser *p);
758
static void *invalid_lambda_kwds_rule(Parser *p);
759
static void *invalid_double_type_comments_rule(Parser *p);
760
static void *invalid_with_item_rule(Parser *p);
761
static void *invalid_for_if_clause_rule(Parser *p);
762
static void *invalid_for_target_rule(Parser *p);
763
static void *invalid_group_rule(Parser *p);
764
static void *invalid_import_rule(Parser *p);
765
static void *invalid_dotted_as_name_rule(Parser *p);
766
static void *invalid_import_from_as_name_rule(Parser *p);
767
static void *invalid_import_from_targets_rule(Parser *p);
768
static void *invalid_with_stmt_rule(Parser *p);
769
static void *invalid_with_stmt_indent_rule(Parser *p);
770
static void *invalid_try_stmt_rule(Parser *p);
771
static void *invalid_except_stmt_rule(Parser *p);
772
static void *invalid_except_star_stmt_rule(Parser *p);
773
static void *invalid_finally_stmt_rule(Parser *p);
774
static void *invalid_except_stmt_indent_rule(Parser *p);
775
static void *invalid_except_star_stmt_indent_rule(Parser *p);
776
static void *invalid_match_stmt_rule(Parser *p);
777
static void *invalid_case_block_rule(Parser *p);
778
static void *invalid_as_pattern_rule(Parser *p);
779
static void *invalid_class_pattern_rule(Parser *p);
780
static asdl_pattern_seq* invalid_class_argument_pattern_rule(Parser *p);
781
static void *invalid_if_stmt_rule(Parser *p);
782
static void *invalid_elif_stmt_rule(Parser *p);
783
static void *invalid_else_stmt_rule(Parser *p);
784
static void *invalid_while_stmt_rule(Parser *p);
785
static void *invalid_for_stmt_rule(Parser *p);
786
static void *invalid_def_raw_rule(Parser *p);
787
static void *invalid_class_def_raw_rule(Parser *p);
788
static void *invalid_double_starred_kvpairs_rule(Parser *p);
789
static void *invalid_kvpair_rule(Parser *p);
790
static void *invalid_starred_expression_unpacking_rule(Parser *p);
791
static void *invalid_starred_expression_rule(Parser *p);
792
static void *invalid_fstring_replacement_field_rule(Parser *p);
793
static void *invalid_fstring_conversion_character_rule(Parser *p);
794
static void *invalid_tstring_replacement_field_rule(Parser *p);
795
static void *invalid_tstring_conversion_character_rule(Parser *p);
796
static void *invalid_arithmetic_rule(Parser *p);
797
static void *invalid_factor_rule(Parser *p);
798
static void *invalid_type_params_rule(Parser *p);
799
static asdl_seq *_loop0_1_rule(Parser *p);
800
static asdl_seq *_loop1_2_rule(Parser *p);
801
static asdl_seq *_loop0_3_rule(Parser *p);
802
static asdl_seq *_gather_4_rule(Parser *p);
803
static void *_tmp_5_rule(Parser *p);
804
static void *_tmp_6_rule(Parser *p);
805
static void *_tmp_7_rule(Parser *p);
806
static void *_tmp_8_rule(Parser *p);
807
static void *_tmp_9_rule(Parser *p);
808
static void *_tmp_10_rule(Parser *p);
809
static void *_tmp_11_rule(Parser *p);
810
static asdl_seq *_loop1_12_rule(Parser *p);
811
static asdl_seq *_loop0_13_rule(Parser *p);
812
static asdl_seq *_gather_14_rule(Parser *p);
813
static void *_tmp_15_rule(Parser *p);
814
static void *_tmp_16_rule(Parser *p);
815
static asdl_seq *_loop0_17_rule(Parser *p);
816
static asdl_seq *_loop1_18_rule(Parser *p);
817
static asdl_seq *_loop0_19_rule(Parser *p);
818
static asdl_seq *_gather_20_rule(Parser *p);
819
static void *_tmp_21_rule(Parser *p);
820
static asdl_seq *_loop0_22_rule(Parser *p);
821
static asdl_seq *_gather_23_rule(Parser *p);
822
static asdl_seq *_loop1_24_rule(Parser *p);
823
static void *_tmp_25_rule(Parser *p);
824
static void *_tmp_26_rule(Parser *p);
825
static asdl_seq *_loop0_27_rule(Parser *p);
826
static asdl_seq *_loop0_28_rule(Parser *p);
827
static asdl_seq *_loop1_29_rule(Parser *p);
828
static asdl_seq *_loop1_30_rule(Parser *p);
829
static asdl_seq *_loop0_31_rule(Parser *p);
830
static asdl_seq *_loop1_32_rule(Parser *p);
831
static asdl_seq *_loop0_33_rule(Parser *p);
832
static asdl_seq *_gather_34_rule(Parser *p);
833
static void *_tmp_35_rule(Parser *p);
834
static asdl_seq *_loop1_36_rule(Parser *p);
835
static asdl_seq *_loop1_37_rule(Parser *p);
836
static asdl_seq *_loop1_38_rule(Parser *p);
837
static asdl_seq *_loop0_39_rule(Parser *p);
838
static asdl_seq *_gather_40_rule(Parser *p);
839
static void *_tmp_41_rule(Parser *p);
840
static void *_tmp_42_rule(Parser *p);
841
static void *_tmp_43_rule(Parser *p);
842
static asdl_seq *_loop0_44_rule(Parser *p);
843
static asdl_seq *_gather_45_rule(Parser *p);
844
static asdl_seq *_loop0_46_rule(Parser *p);
845
static asdl_seq *_gather_47_rule(Parser *p);
846
static void *_tmp_48_rule(Parser *p);
847
static asdl_seq *_loop0_49_rule(Parser *p);
848
static asdl_seq *_gather_50_rule(Parser *p);
849
static asdl_seq *_loop0_51_rule(Parser *p);
850
static asdl_seq *_gather_52_rule(Parser *p);
851
static asdl_seq *_loop0_53_rule(Parser *p);
852
static asdl_seq *_gather_54_rule(Parser *p);
853
static asdl_seq *_loop1_55_rule(Parser *p);
854
static asdl_seq *_loop1_56_rule(Parser *p);
855
static asdl_seq *_loop0_57_rule(Parser *p);
856
static asdl_seq *_gather_58_rule(Parser *p);
857
static asdl_seq *_loop1_59_rule(Parser *p);
858
static asdl_seq *_loop1_60_rule(Parser *p);
859
static asdl_seq *_loop1_61_rule(Parser *p);
860
static void *_tmp_62_rule(Parser *p);
861
static asdl_seq *_loop0_63_rule(Parser *p);
862
static asdl_seq *_gather_64_rule(Parser *p);
863
static void *_tmp_65_rule(Parser *p);
864
static void *_tmp_66_rule(Parser *p);
865
static void *_tmp_67_rule(Parser *p);
866
static void *_tmp_68_rule(Parser *p);
867
static void *_tmp_69_rule(Parser *p);
868
static asdl_seq *_loop0_70_rule(Parser *p);
869
static asdl_seq *_loop0_71_rule(Parser *p);
870
static asdl_seq *_loop1_72_rule(Parser *p);
871
static asdl_seq *_loop1_73_rule(Parser *p);
872
static asdl_seq *_loop0_74_rule(Parser *p);
873
static asdl_seq *_loop1_75_rule(Parser *p);
874
static asdl_seq *_loop0_76_rule(Parser *p);
875
static asdl_seq *_loop0_77_rule(Parser *p);
876
static asdl_seq *_loop0_78_rule(Parser *p);
877
static asdl_seq *_loop0_79_rule(Parser *p);
878
static asdl_seq *_loop1_80_rule(Parser *p);
879
static void *_tmp_81_rule(Parser *p);
880
static asdl_seq *_loop0_82_rule(Parser *p);
881
static asdl_seq *_gather_83_rule(Parser *p);
882
static asdl_seq *_loop1_84_rule(Parser *p);
883
static asdl_seq *_loop0_85_rule(Parser *p);
884
static void *_tmp_86_rule(Parser *p);
885
static asdl_seq *_loop0_87_rule(Parser *p);
886
static asdl_seq *_gather_88_rule(Parser *p);
887
static void *_tmp_89_rule(Parser *p);
888
static asdl_seq *_loop0_90_rule(Parser *p);
889
static asdl_seq *_gather_91_rule(Parser *p);
890
static asdl_seq *_loop0_92_rule(Parser *p);
891
static asdl_seq *_gather_93_rule(Parser *p);
892
static asdl_seq *_loop0_94_rule(Parser *p);
893
static asdl_seq *_loop0_95_rule(Parser *p);
894
static asdl_seq *_gather_96_rule(Parser *p);
895
static asdl_seq *_loop1_97_rule(Parser *p);
896
static void *_tmp_98_rule(Parser *p);
897
static asdl_seq *_loop0_99_rule(Parser *p);
898
static asdl_seq *_gather_100_rule(Parser *p);
899
static asdl_seq *_loop0_101_rule(Parser *p);
900
static asdl_seq *_gather_102_rule(Parser *p);
901
static void *_tmp_103_rule(Parser *p);
902
static void *_tmp_104_rule(Parser *p);
903
static asdl_seq *_loop0_105_rule(Parser *p);
904
static asdl_seq *_gather_106_rule(Parser *p);
905
static void *_tmp_107_rule(Parser *p);
906
static void *_tmp_108_rule(Parser *p);
907
static void *_tmp_109_rule(Parser *p);
908
static void *_tmp_110_rule(Parser *p);
909
static void *_tmp_111_rule(Parser *p);
910
static asdl_seq *_loop1_112_rule(Parser *p);
911
static void *_tmp_113_rule(Parser *p);
912
static void *_tmp_114_rule(Parser *p);
913
static void *_tmp_115_rule(Parser *p);
914
static void *_tmp_116_rule(Parser *p);
915
static void *_tmp_117_rule(Parser *p);
916
static asdl_seq *_loop0_118_rule(Parser *p);
917
static asdl_seq *_loop0_119_rule(Parser *p);
918
static void *_tmp_120_rule(Parser *p);
919
static void *_tmp_121_rule(Parser *p);
920
static void *_tmp_122_rule(Parser *p);
921
static void *_tmp_123_rule(Parser *p);
922
static void *_tmp_124_rule(Parser *p);
923
static void *_tmp_125_rule(Parser *p);
924
static void *_tmp_126_rule(Parser *p);
925
static void *_tmp_127_rule(Parser *p);
926
static void *_tmp_128_rule(Parser *p);
927
static asdl_seq *_loop0_129_rule(Parser *p);
928
static asdl_seq *_gather_130_rule(Parser *p);
929
static void *_tmp_131_rule(Parser *p);
930
static void *_tmp_132_rule(Parser *p);
931
static void *_tmp_133_rule(Parser *p);
932
static void *_tmp_134_rule(Parser *p);
933
static asdl_seq *_loop0_135_rule(Parser *p);
934
static asdl_seq *_gather_136_rule(Parser *p);
935
static void *_tmp_137_rule(Parser *p);
936
static asdl_seq *_loop0_138_rule(Parser *p);
937
static asdl_seq *_gather_139_rule(Parser *p);
938
static asdl_seq *_loop0_140_rule(Parser *p);
939
static asdl_seq *_gather_141_rule(Parser *p);
940
static void *_tmp_142_rule(Parser *p);
941
static asdl_seq *_loop0_143_rule(Parser *p);
942
static void *_tmp_144_rule(Parser *p);
943
static void *_tmp_145_rule(Parser *p);
944
static void *_tmp_146_rule(Parser *p);
945
static void *_tmp_147_rule(Parser *p);
946
static void *_tmp_148_rule(Parser *p);
947
static void *_tmp_149_rule(Parser *p);
948
static void *_tmp_150_rule(Parser *p);
949
static void *_tmp_151_rule(Parser *p);
950
static void *_tmp_152_rule(Parser *p);
951
static void *_tmp_153_rule(Parser *p);
952
static void *_tmp_154_rule(Parser *p);
953
static void *_tmp_155_rule(Parser *p);
954
static void *_tmp_156_rule(Parser *p);
955
static void *_tmp_157_rule(Parser *p);
956
static void *_tmp_158_rule(Parser *p);
957
static void *_tmp_159_rule(Parser *p);
958
static void *_tmp_160_rule(Parser *p);
959
static void *_tmp_161_rule(Parser *p);
960
static void *_tmp_162_rule(Parser *p);
961
static void *_tmp_163_rule(Parser *p);
962
static void *_tmp_164_rule(Parser *p);
963
static void *_tmp_165_rule(Parser *p);
964
static void *_tmp_166_rule(Parser *p);
965
static void *_tmp_167_rule(Parser *p);
966
static void *_tmp_168_rule(Parser *p);
967
static void *_tmp_169_rule(Parser *p);
968
static asdl_seq *_loop0_170_rule(Parser *p);
969
static void *_tmp_171_rule(Parser *p);
970
static void *_tmp_172_rule(Parser *p);
971
static void *_tmp_173_rule(Parser *p);
972
static void *_tmp_174_rule(Parser *p);
973
static void *_tmp_175_rule(Parser *p);
974
975
976
// file: statements? $
977
static mod_ty
978
file_rule(Parser *p)
979
31.2k
{
980
31.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
981
0
        _Pypegen_stack_overflow(p);
982
0
    }
983
31.2k
    if (p->error_indicator) {
984
3.49k
        p->level--;
985
3.49k
        return NULL;
986
3.49k
    }
987
27.7k
    mod_ty _res = NULL;
988
27.7k
    int _mark = p->mark;
989
27.7k
    { // statements? $
990
27.7k
        if (p->error_indicator) {
991
0
            p->level--;
992
0
            return NULL;
993
0
        }
994
27.7k
        D(fprintf(stderr, "%*c> file[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statements? $"));
995
27.7k
        void *a;
996
27.7k
        Token * endmarker_var;
997
27.7k
        if (
998
27.7k
            (a = statements_rule(p), !p->error_indicator)  // statements?
999
27.7k
            &&
1000
27.7k
            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
1001
27.7k
        )
1002
6.89k
        {
1003
6.89k
            D(fprintf(stderr, "%*c+ file[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statements? $"));
1004
6.89k
            _res = _PyPegen_make_module ( p , a );
1005
6.89k
            if (_res == NULL && PyErr_Occurred()) {
1006
0
                p->error_indicator = 1;
1007
0
                p->level--;
1008
0
                return NULL;
1009
0
            }
1010
6.89k
            goto done;
1011
6.89k
        }
1012
20.8k
        p->mark = _mark;
1013
20.8k
        D(fprintf(stderr, "%*c%s file[%d-%d]: %s failed!\n", p->level, ' ',
1014
20.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statements? $"));
1015
20.8k
    }
1016
0
    _res = NULL;
1017
27.7k
  done:
1018
27.7k
    p->level--;
1019
27.7k
    return _res;
1020
20.8k
}
1021
1022
// interactive: statement_newline
1023
static mod_ty
1024
interactive_rule(Parser *p)
1025
0
{
1026
0
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1027
0
        _Pypegen_stack_overflow(p);
1028
0
    }
1029
0
    if (p->error_indicator) {
1030
0
        p->level--;
1031
0
        return NULL;
1032
0
    }
1033
0
    mod_ty _res = NULL;
1034
0
    int _mark = p->mark;
1035
0
    { // statement_newline
1036
0
        if (p->error_indicator) {
1037
0
            p->level--;
1038
0
            return NULL;
1039
0
        }
1040
0
        D(fprintf(stderr, "%*c> interactive[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement_newline"));
1041
0
        asdl_stmt_seq* a;
1042
0
        if (
1043
0
            (a = statement_newline_rule(p))  // statement_newline
1044
0
        )
1045
0
        {
1046
0
            D(fprintf(stderr, "%*c+ interactive[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement_newline"));
1047
0
            _res = _PyAST_Interactive ( a , p -> arena );
1048
0
            if (_res == NULL && PyErr_Occurred()) {
1049
0
                p->error_indicator = 1;
1050
0
                p->level--;
1051
0
                return NULL;
1052
0
            }
1053
0
            goto done;
1054
0
        }
1055
0
        p->mark = _mark;
1056
0
        D(fprintf(stderr, "%*c%s interactive[%d-%d]: %s failed!\n", p->level, ' ',
1057
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement_newline"));
1058
0
    }
1059
0
    _res = NULL;
1060
0
  done:
1061
0
    p->level--;
1062
0
    return _res;
1063
0
}
1064
1065
// eval: expressions NEWLINE* $
1066
static mod_ty
1067
eval_rule(Parser *p)
1068
43
{
1069
43
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1070
0
        _Pypegen_stack_overflow(p);
1071
0
    }
1072
43
    if (p->error_indicator) {
1073
0
        p->level--;
1074
0
        return NULL;
1075
0
    }
1076
43
    mod_ty _res = NULL;
1077
43
    int _mark = p->mark;
1078
43
    { // expressions NEWLINE* $
1079
43
        if (p->error_indicator) {
1080
0
            p->level--;
1081
0
            return NULL;
1082
0
        }
1083
43
        D(fprintf(stderr, "%*c> eval[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions NEWLINE* $"));
1084
43
        asdl_seq * _loop0_1_var;
1085
43
        expr_ty a;
1086
43
        Token * endmarker_var;
1087
43
        if (
1088
43
            (a = expressions_rule(p))  // expressions
1089
43
            &&
1090
43
            (_loop0_1_var = _loop0_1_rule(p))  // NEWLINE*
1091
43
            &&
1092
43
            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
1093
43
        )
1094
43
        {
1095
43
            D(fprintf(stderr, "%*c+ eval[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions NEWLINE* $"));
1096
43
            _res = _PyAST_Expression ( a , p -> arena );
1097
43
            if (_res == NULL && PyErr_Occurred()) {
1098
0
                p->error_indicator = 1;
1099
0
                p->level--;
1100
0
                return NULL;
1101
0
            }
1102
43
            goto done;
1103
43
        }
1104
0
        p->mark = _mark;
1105
0
        D(fprintf(stderr, "%*c%s eval[%d-%d]: %s failed!\n", p->level, ' ',
1106
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions NEWLINE* $"));
1107
0
    }
1108
0
    _res = NULL;
1109
43
  done:
1110
43
    p->level--;
1111
43
    return _res;
1112
0
}
1113
1114
// func_type: '(' type_expressions? ')' '->' expression NEWLINE* $
1115
static mod_ty
1116
func_type_rule(Parser *p)
1117
0
{
1118
0
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1119
0
        _Pypegen_stack_overflow(p);
1120
0
    }
1121
0
    if (p->error_indicator) {
1122
0
        p->level--;
1123
0
        return NULL;
1124
0
    }
1125
0
    mod_ty _res = NULL;
1126
0
    int _mark = p->mark;
1127
0
    { // '(' type_expressions? ')' '->' expression NEWLINE* $
1128
0
        if (p->error_indicator) {
1129
0
            p->level--;
1130
0
            return NULL;
1131
0
        }
1132
0
        D(fprintf(stderr, "%*c> func_type[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' type_expressions? ')' '->' expression NEWLINE* $"));
1133
0
        Token * _literal;
1134
0
        Token * _literal_1;
1135
0
        Token * _literal_2;
1136
0
        asdl_seq * _loop0_1_var;
1137
0
        void *a;
1138
0
        expr_ty b;
1139
0
        Token * endmarker_var;
1140
0
        if (
1141
0
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
1142
0
            &&
1143
0
            (a = type_expressions_rule(p), !p->error_indicator)  // type_expressions?
1144
0
            &&
1145
0
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
1146
0
            &&
1147
0
            (_literal_2 = _PyPegen_expect_token(p, 51))  // token='->'
1148
0
            &&
1149
0
            (b = expression_rule(p))  // expression
1150
0
            &&
1151
0
            (_loop0_1_var = _loop0_1_rule(p))  // NEWLINE*
1152
0
            &&
1153
0
            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
1154
0
        )
1155
0
        {
1156
0
            D(fprintf(stderr, "%*c+ func_type[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' type_expressions? ')' '->' expression NEWLINE* $"));
1157
0
            _res = _PyAST_FunctionType ( a , b , p -> arena );
1158
0
            if (_res == NULL && PyErr_Occurred()) {
1159
0
                p->error_indicator = 1;
1160
0
                p->level--;
1161
0
                return NULL;
1162
0
            }
1163
0
            goto done;
1164
0
        }
1165
0
        p->mark = _mark;
1166
0
        D(fprintf(stderr, "%*c%s func_type[%d-%d]: %s failed!\n", p->level, ' ',
1167
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' type_expressions? ')' '->' expression NEWLINE* $"));
1168
0
    }
1169
0
    _res = NULL;
1170
0
  done:
1171
0
    p->level--;
1172
0
    return _res;
1173
0
}
1174
1175
// statements: statement+
1176
static asdl_stmt_seq*
1177
statements_rule(Parser *p)
1178
46.2k
{
1179
46.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1180
0
        _Pypegen_stack_overflow(p);
1181
0
    }
1182
46.2k
    if (p->error_indicator) {
1183
0
        p->level--;
1184
0
        return NULL;
1185
0
    }
1186
46.2k
    asdl_stmt_seq* _res = NULL;
1187
46.2k
    int _mark = p->mark;
1188
46.2k
    { // statement+
1189
46.2k
        if (p->error_indicator) {
1190
0
            p->level--;
1191
0
            return NULL;
1192
0
        }
1193
46.2k
        D(fprintf(stderr, "%*c> statements[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement+"));
1194
46.2k
        asdl_seq * a;
1195
46.2k
        if (
1196
46.2k
            (a = _loop1_2_rule(p))  // statement+
1197
46.2k
        )
1198
26.0k
        {
1199
26.0k
            D(fprintf(stderr, "%*c+ statements[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement+"));
1200
26.0k
            _res = _PyPegen_register_stmts ( p , ( asdl_stmt_seq* ) _PyPegen_seq_flatten ( p , a ) );
1201
26.0k
            if (_res == NULL && PyErr_Occurred()) {
1202
0
                p->error_indicator = 1;
1203
0
                p->level--;
1204
0
                return NULL;
1205
0
            }
1206
26.0k
            goto done;
1207
26.0k
        }
1208
20.2k
        p->mark = _mark;
1209
20.2k
        D(fprintf(stderr, "%*c%s statements[%d-%d]: %s failed!\n", p->level, ' ',
1210
20.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement+"));
1211
20.2k
    }
1212
0
    _res = NULL;
1213
46.2k
  done:
1214
46.2k
    p->level--;
1215
46.2k
    return _res;
1216
20.2k
}
1217
1218
// statement: compound_stmt | simple_stmts
1219
static asdl_stmt_seq*
1220
statement_rule(Parser *p)
1221
156k
{
1222
156k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1223
0
        _Pypegen_stack_overflow(p);
1224
0
    }
1225
156k
    if (p->error_indicator) {
1226
0
        p->level--;
1227
0
        return NULL;
1228
0
    }
1229
156k
    asdl_stmt_seq* _res = NULL;
1230
156k
    int _mark = p->mark;
1231
156k
    { // compound_stmt
1232
156k
        if (p->error_indicator) {
1233
0
            p->level--;
1234
0
            return NULL;
1235
0
        }
1236
156k
        D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
1237
156k
        stmt_ty a;
1238
156k
        if (
1239
156k
            (a = compound_stmt_rule(p))  // compound_stmt
1240
156k
        )
1241
32.9k
        {
1242
32.9k
            D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
1243
32.9k
            _res = ( asdl_stmt_seq* ) _PyPegen_singleton_seq ( p , a );
1244
32.9k
            if (_res == NULL && PyErr_Occurred()) {
1245
0
                p->error_indicator = 1;
1246
0
                p->level--;
1247
0
                return NULL;
1248
0
            }
1249
32.9k
            goto done;
1250
32.9k
        }
1251
123k
        p->mark = _mark;
1252
123k
        D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
1253
123k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt"));
1254
123k
    }
1255
0
    { // simple_stmts
1256
123k
        if (p->error_indicator) {
1257
2.22k
            p->level--;
1258
2.22k
            return NULL;
1259
2.22k
        }
1260
121k
        D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
1261
121k
        asdl_stmt_seq* a;
1262
121k
        if (
1263
121k
            (a = (asdl_stmt_seq*)simple_stmts_rule(p))  // simple_stmts
1264
121k
        )
1265
77.4k
        {
1266
77.4k
            D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
1267
77.4k
            _res = a;
1268
77.4k
            if (_res == NULL && PyErr_Occurred()) {
1269
0
                p->error_indicator = 1;
1270
0
                p->level--;
1271
0
                return NULL;
1272
0
            }
1273
77.4k
            goto done;
1274
77.4k
        }
1275
44.0k
        p->mark = _mark;
1276
44.0k
        D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
1277
44.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts"));
1278
44.0k
    }
1279
0
    _res = NULL;
1280
154k
  done:
1281
154k
    p->level--;
1282
154k
    return _res;
1283
44.0k
}
1284
1285
// single_compound_stmt: compound_stmt
1286
static asdl_stmt_seq*
1287
single_compound_stmt_rule(Parser *p)
1288
0
{
1289
0
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1290
0
        _Pypegen_stack_overflow(p);
1291
0
    }
1292
0
    if (p->error_indicator) {
1293
0
        p->level--;
1294
0
        return NULL;
1295
0
    }
1296
0
    asdl_stmt_seq* _res = NULL;
1297
0
    int _mark = p->mark;
1298
0
    { // compound_stmt
1299
0
        if (p->error_indicator) {
1300
0
            p->level--;
1301
0
            return NULL;
1302
0
        }
1303
0
        D(fprintf(stderr, "%*c> single_compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
1304
0
        stmt_ty a;
1305
0
        if (
1306
0
            (a = compound_stmt_rule(p))  // compound_stmt
1307
0
        )
1308
0
        {
1309
0
            D(fprintf(stderr, "%*c+ single_compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
1310
0
            _res = _PyPegen_register_stmts ( p , ( asdl_stmt_seq* ) _PyPegen_singleton_seq ( p , a ) );
1311
0
            if (_res == NULL && PyErr_Occurred()) {
1312
0
                p->error_indicator = 1;
1313
0
                p->level--;
1314
0
                return NULL;
1315
0
            }
1316
0
            goto done;
1317
0
        }
1318
0
        p->mark = _mark;
1319
0
        D(fprintf(stderr, "%*c%s single_compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1320
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt"));
1321
0
    }
1322
0
    _res = NULL;
1323
0
  done:
1324
0
    p->level--;
1325
0
    return _res;
1326
0
}
1327
1328
// statement_newline: single_compound_stmt NEWLINE | simple_stmts | NEWLINE | $
1329
static asdl_stmt_seq*
1330
statement_newline_rule(Parser *p)
1331
0
{
1332
0
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1333
0
        _Pypegen_stack_overflow(p);
1334
0
    }
1335
0
    if (p->error_indicator) {
1336
0
        p->level--;
1337
0
        return NULL;
1338
0
    }
1339
0
    asdl_stmt_seq* _res = NULL;
1340
0
    int _mark = p->mark;
1341
0
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
1342
0
        p->error_indicator = 1;
1343
0
        p->level--;
1344
0
        return NULL;
1345
0
    }
1346
0
    int _start_lineno = p->tokens[_mark]->lineno;
1347
0
    UNUSED(_start_lineno); // Only used by EXTRA macro
1348
0
    int _start_col_offset = p->tokens[_mark]->col_offset;
1349
0
    UNUSED(_start_col_offset); // Only used by EXTRA macro
1350
0
    { // single_compound_stmt NEWLINE
1351
0
        if (p->error_indicator) {
1352
0
            p->level--;
1353
0
            return NULL;
1354
0
        }
1355
0
        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_compound_stmt NEWLINE"));
1356
0
        asdl_stmt_seq* a;
1357
0
        Token * newline_var;
1358
0
        if (
1359
0
            (a = single_compound_stmt_rule(p))  // single_compound_stmt
1360
0
            &&
1361
0
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
1362
0
        )
1363
0
        {
1364
0
            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_compound_stmt NEWLINE"));
1365
0
            _res = a;
1366
0
            if (_res == NULL && PyErr_Occurred()) {
1367
0
                p->error_indicator = 1;
1368
0
                p->level--;
1369
0
                return NULL;
1370
0
            }
1371
0
            goto done;
1372
0
        }
1373
0
        p->mark = _mark;
1374
0
        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
1375
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_compound_stmt NEWLINE"));
1376
0
    }
1377
0
    { // simple_stmts
1378
0
        if (p->error_indicator) {
1379
0
            p->level--;
1380
0
            return NULL;
1381
0
        }
1382
0
        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
1383
0
        asdl_stmt_seq* simple_stmts_var;
1384
0
        if (
1385
0
            (simple_stmts_var = simple_stmts_rule(p))  // simple_stmts
1386
0
        )
1387
0
        {
1388
0
            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
1389
0
            _res = simple_stmts_var;
1390
0
            goto done;
1391
0
        }
1392
0
        p->mark = _mark;
1393
0
        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
1394
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts"));
1395
0
    }
1396
0
    { // NEWLINE
1397
0
        if (p->error_indicator) {
1398
0
            p->level--;
1399
0
            return NULL;
1400
0
        }
1401
0
        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
1402
0
        Token * newline_var;
1403
0
        if (
1404
0
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
1405
0
        )
1406
0
        {
1407
0
            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
1408
0
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
1409
0
            if (_token == NULL) {
1410
0
                p->level--;
1411
0
                return NULL;
1412
0
            }
1413
0
            int _end_lineno = _token->end_lineno;
1414
0
            UNUSED(_end_lineno); // Only used by EXTRA macro
1415
0
            int _end_col_offset = _token->end_col_offset;
1416
0
            UNUSED(_end_col_offset); // Only used by EXTRA macro
1417
0
            _res = ( asdl_stmt_seq* ) _PyPegen_singleton_seq ( p , CHECK ( stmt_ty , _PyAST_Pass ( EXTRA ) ) );
1418
0
            if (_res == NULL && PyErr_Occurred()) {
1419
0
                p->error_indicator = 1;
1420
0
                p->level--;
1421
0
                return NULL;
1422
0
            }
1423
0
            goto done;
1424
0
        }
1425
0
        p->mark = _mark;
1426
0
        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
1427
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
1428
0
    }
1429
0
    { // $
1430
0
        if (p->error_indicator) {
1431
0
            p->level--;
1432
0
            return NULL;
1433
0
        }
1434
0
        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "$"));
1435
0
        Token * endmarker_var;
1436
0
        if (
1437
0
            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
1438
0
        )
1439
0
        {
1440
0
            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "$"));
1441
0
            _res = _PyPegen_interactive_exit ( p );
1442
0
            if (_res == NULL && PyErr_Occurred()) {
1443
0
                p->error_indicator = 1;
1444
0
                p->level--;
1445
0
                return NULL;
1446
0
            }
1447
0
            goto done;
1448
0
        }
1449
0
        p->mark = _mark;
1450
0
        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
1451
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "$"));
1452
0
    }
1453
0
    _res = NULL;
1454
0
  done:
1455
0
    p->level--;
1456
0
    return _res;
1457
0
}
1458
1459
// simple_stmts: simple_stmt !';' NEWLINE | ';'.simple_stmt+ ';'? NEWLINE
1460
static asdl_stmt_seq*
1461
simple_stmts_rule(Parser *p)
1462
152k
{
1463
152k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1464
0
        _Pypegen_stack_overflow(p);
1465
0
    }
1466
152k
    if (p->error_indicator) {
1467
0
        p->level--;
1468
0
        return NULL;
1469
0
    }
1470
152k
    asdl_stmt_seq* _res = NULL;
1471
152k
    int _mark = p->mark;
1472
152k
    { // simple_stmt !';' NEWLINE
1473
152k
        if (p->error_indicator) {
1474
0
            p->level--;
1475
0
            return NULL;
1476
0
        }
1477
152k
        D(fprintf(stderr, "%*c> simple_stmts[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt !';' NEWLINE"));
1478
152k
        stmt_ty a;
1479
152k
        Token * newline_var;
1480
152k
        if (
1481
152k
            (a = simple_stmt_rule(p))  // simple_stmt
1482
152k
            &&
1483
152k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 13)  // token=';'
1484
152k
            &&
1485
152k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
1486
152k
        )
1487
103k
        {
1488
103k
            D(fprintf(stderr, "%*c+ simple_stmts[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt !';' NEWLINE"));
1489
103k
            _res = ( asdl_stmt_seq* ) _PyPegen_singleton_seq ( p , a );
1490
103k
            if (_res == NULL && PyErr_Occurred()) {
1491
0
                p->error_indicator = 1;
1492
0
                p->level--;
1493
0
                return NULL;
1494
0
            }
1495
103k
            goto done;
1496
103k
        }
1497
49.1k
        p->mark = _mark;
1498
49.1k
        D(fprintf(stderr, "%*c%s simple_stmts[%d-%d]: %s failed!\n", p->level, ' ',
1499
49.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt !';' NEWLINE"));
1500
49.1k
    }
1501
0
    { // ';'.simple_stmt+ ';'? NEWLINE
1502
49.1k
        if (p->error_indicator) {
1503
4.18k
            p->level--;
1504
4.18k
            return NULL;
1505
4.18k
        }
1506
44.9k
        D(fprintf(stderr, "%*c> simple_stmts[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
1507
44.9k
        void *_opt_var;
1508
44.9k
        UNUSED(_opt_var); // Silence compiler warnings
1509
44.9k
        asdl_stmt_seq* a;
1510
44.9k
        Token * newline_var;
1511
44.9k
        if (
1512
44.9k
            (a = (asdl_stmt_seq*)_gather_4_rule(p))  // ';'.simple_stmt+
1513
44.9k
            &&
1514
44.9k
            (_opt_var = _PyPegen_expect_token(p, 13), !p->error_indicator)  // ';'?
1515
44.9k
            &&
1516
44.9k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
1517
44.9k
        )
1518
2.54k
        {
1519
2.54k
            D(fprintf(stderr, "%*c+ simple_stmts[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
1520
2.54k
            _res = a;
1521
2.54k
            if (_res == NULL && PyErr_Occurred()) {
1522
0
                p->error_indicator = 1;
1523
0
                p->level--;
1524
0
                return NULL;
1525
0
            }
1526
2.54k
            goto done;
1527
2.54k
        }
1528
42.3k
        p->mark = _mark;
1529
42.3k
        D(fprintf(stderr, "%*c%s simple_stmts[%d-%d]: %s failed!\n", p->level, ' ',
1530
42.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
1531
42.3k
    }
1532
0
    _res = NULL;
1533
148k
  done:
1534
148k
    p->level--;
1535
148k
    return _res;
1536
42.3k
}
1537
1538
// simple_stmt:
1539
//     | assignment
1540
//     | &"type" type_alias
1541
//     | star_expressions
1542
//     | &'return' return_stmt
1543
//     | &('import' | 'from') import_stmt
1544
//     | &'raise' raise_stmt
1545
//     | &'pass' pass_stmt
1546
//     | &'del' del_stmt
1547
//     | &'yield' yield_stmt
1548
//     | &'assert' assert_stmt
1549
//     | &'break' break_stmt
1550
//     | &'continue' continue_stmt
1551
//     | &'global' global_stmt
1552
//     | &'nonlocal' nonlocal_stmt
1553
static stmt_ty
1554
simple_stmt_rule(Parser *p)
1555
217k
{
1556
217k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1557
0
        _Pypegen_stack_overflow(p);
1558
0
    }
1559
217k
    if (p->error_indicator) {
1560
0
        p->level--;
1561
0
        return NULL;
1562
0
    }
1563
217k
    stmt_ty _res = NULL;
1564
217k
    if (_PyPegen_is_memoized(p, simple_stmt_type, &_res)) {
1565
44.9k
        p->level--;
1566
44.9k
        return _res;
1567
44.9k
    }
1568
172k
    int _mark = p->mark;
1569
172k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
1570
0
        p->error_indicator = 1;
1571
0
        p->level--;
1572
0
        return NULL;
1573
0
    }
1574
172k
    int _start_lineno = p->tokens[_mark]->lineno;
1575
172k
    UNUSED(_start_lineno); // Only used by EXTRA macro
1576
172k
    int _start_col_offset = p->tokens[_mark]->col_offset;
1577
172k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
1578
172k
    { // assignment
1579
172k
        if (p->error_indicator) {
1580
0
            p->level--;
1581
0
            return NULL;
1582
0
        }
1583
172k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment"));
1584
172k
        stmt_ty assignment_var;
1585
172k
        if (
1586
172k
            (assignment_var = assignment_rule(p))  // assignment
1587
172k
        )
1588
18.5k
        {
1589
18.5k
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment"));
1590
18.5k
            _res = assignment_var;
1591
18.5k
            goto done;
1592
18.5k
        }
1593
153k
        p->mark = _mark;
1594
153k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1595
153k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment"));
1596
153k
    }
1597
0
    { // &"type" type_alias
1598
153k
        if (p->error_indicator) {
1599
4.35k
            p->level--;
1600
4.35k
            return NULL;
1601
4.35k
        }
1602
149k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&\"type\" type_alias"));
1603
149k
        stmt_ty type_alias_var;
1604
149k
        if (
1605
149k
            _PyPegen_lookahead_with_string(1, _PyPegen_expect_soft_keyword, p, "type")
1606
149k
            &&
1607
149k
            (type_alias_var = type_alias_rule(p))  // type_alias
1608
149k
        )
1609
281
        {
1610
281
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&\"type\" type_alias"));
1611
281
            _res = type_alias_var;
1612
281
            goto done;
1613
281
        }
1614
149k
        p->mark = _mark;
1615
149k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1616
149k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&\"type\" type_alias"));
1617
149k
    }
1618
0
    { // star_expressions
1619
149k
        if (p->error_indicator) {
1620
4
            p->level--;
1621
4
            return NULL;
1622
4
        }
1623
149k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
1624
149k
        expr_ty e;
1625
149k
        if (
1626
149k
            (e = star_expressions_rule(p))  // star_expressions
1627
149k
        )
1628
90.4k
        {
1629
90.4k
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
1630
90.4k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
1631
90.4k
            if (_token == NULL) {
1632
0
                p->level--;
1633
0
                return NULL;
1634
0
            }
1635
90.4k
            int _end_lineno = _token->end_lineno;
1636
90.4k
            UNUSED(_end_lineno); // Only used by EXTRA macro
1637
90.4k
            int _end_col_offset = _token->end_col_offset;
1638
90.4k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
1639
90.4k
            _res = _PyAST_Expr ( e , EXTRA );
1640
90.4k
            if (_res == NULL && PyErr_Occurred()) {
1641
0
                p->error_indicator = 1;
1642
0
                p->level--;
1643
0
                return NULL;
1644
0
            }
1645
90.4k
            goto done;
1646
90.4k
        }
1647
58.8k
        p->mark = _mark;
1648
58.8k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1649
58.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
1650
58.8k
    }
1651
0
    { // &'return' return_stmt
1652
58.8k
        if (p->error_indicator) {
1653
385
            p->level--;
1654
385
            return NULL;
1655
385
        }
1656
58.4k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
1657
58.4k
        stmt_ty return_stmt_var;
1658
58.4k
        if (
1659
58.4k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 522)  // token='return'
1660
58.4k
            &&
1661
58.4k
            (return_stmt_var = return_stmt_rule(p))  // return_stmt
1662
58.4k
        )
1663
7.44k
        {
1664
7.44k
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
1665
7.44k
            _res = return_stmt_var;
1666
7.44k
            goto done;
1667
7.44k
        }
1668
51.0k
        p->mark = _mark;
1669
51.0k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1670
51.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'return' return_stmt"));
1671
51.0k
    }
1672
0
    { // &('import' | 'from') import_stmt
1673
51.0k
        if (p->error_indicator) {
1674
11
            p->level--;
1675
11
            return NULL;
1676
11
        }
1677
51.0k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt"));
1678
51.0k
        stmt_ty import_stmt_var;
1679
51.0k
        if (
1680
51.0k
            _PyPegen_lookahead(1, _tmp_5_rule, p)
1681
51.0k
            &&
1682
51.0k
            (import_stmt_var = import_stmt_rule(p))  // import_stmt
1683
51.0k
        )
1684
4.73k
        {
1685
4.73k
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt"));
1686
4.73k
            _res = import_stmt_var;
1687
4.73k
            goto done;
1688
4.73k
        }
1689
46.3k
        p->mark = _mark;
1690
46.3k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1691
46.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('import' | 'from') import_stmt"));
1692
46.3k
    }
1693
0
    { // &'raise' raise_stmt
1694
46.3k
        if (p->error_indicator) {
1695
70
            p->level--;
1696
70
            return NULL;
1697
70
        }
1698
46.2k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
1699
46.2k
        stmt_ty raise_stmt_var;
1700
46.2k
        if (
1701
46.2k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 628)  // token='raise'
1702
46.2k
            &&
1703
46.2k
            (raise_stmt_var = raise_stmt_rule(p))  // raise_stmt
1704
46.2k
        )
1705
3.50k
        {
1706
3.50k
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
1707
3.50k
            _res = raise_stmt_var;
1708
3.50k
            goto done;
1709
3.50k
        }
1710
42.7k
        p->mark = _mark;
1711
42.7k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1712
42.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'raise' raise_stmt"));
1713
42.7k
    }
1714
0
    { // &'pass' pass_stmt
1715
42.7k
        if (p->error_indicator) {
1716
25
            p->level--;
1717
25
            return NULL;
1718
25
        }
1719
42.7k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'pass' pass_stmt"));
1720
42.7k
        stmt_ty pass_stmt_var;
1721
42.7k
        if (
1722
42.7k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 527)  // token='pass'
1723
42.7k
            &&
1724
42.7k
            (pass_stmt_var = pass_stmt_rule(p))  // pass_stmt
1725
42.7k
        )
1726
1.19k
        {
1727
1.19k
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'pass' pass_stmt"));
1728
1.19k
            _res = pass_stmt_var;
1729
1.19k
            goto done;
1730
1.19k
        }
1731
41.5k
        p->mark = _mark;
1732
41.5k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1733
41.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'pass' pass_stmt"));
1734
41.5k
    }
1735
0
    { // &'del' del_stmt
1736
41.5k
        if (p->error_indicator) {
1737
0
            p->level--;
1738
0
            return NULL;
1739
0
        }
1740
41.5k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
1741
41.5k
        stmt_ty del_stmt_var;
1742
41.5k
        if (
1743
41.5k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 630)  // token='del'
1744
41.5k
            &&
1745
41.5k
            (del_stmt_var = del_stmt_rule(p))  // del_stmt
1746
41.5k
        )
1747
750
        {
1748
750
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
1749
750
            _res = del_stmt_var;
1750
750
            goto done;
1751
750
        }
1752
40.7k
        p->mark = _mark;
1753
40.7k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1754
40.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'del' del_stmt"));
1755
40.7k
    }
1756
0
    { // &'yield' yield_stmt
1757
40.7k
        if (p->error_indicator) {
1758
220
            p->level--;
1759
220
            return NULL;
1760
220
        }
1761
40.5k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
1762
40.5k
        stmt_ty yield_stmt_var;
1763
40.5k
        if (
1764
40.5k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 588)  // token='yield'
1765
40.5k
            &&
1766
40.5k
            (yield_stmt_var = yield_stmt_rule(p))  // yield_stmt
1767
40.5k
        )
1768
1.65k
        {
1769
1.65k
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
1770
1.65k
            _res = yield_stmt_var;
1771
1.65k
            goto done;
1772
1.65k
        }
1773
38.8k
        p->mark = _mark;
1774
38.8k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1775
38.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'yield' yield_stmt"));
1776
38.8k
    }
1777
0
    { // &'assert' assert_stmt
1778
38.8k
        if (p->error_indicator) {
1779
3
            p->level--;
1780
3
            return NULL;
1781
3
        }
1782
38.8k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
1783
38.8k
        stmt_ty assert_stmt_var;
1784
38.8k
        if (
1785
38.8k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 533)  // token='assert'
1786
38.8k
            &&
1787
38.8k
            (assert_stmt_var = assert_stmt_rule(p))  // assert_stmt
1788
38.8k
        )
1789
581
        {
1790
581
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
1791
581
            _res = assert_stmt_var;
1792
581
            goto done;
1793
581
        }
1794
38.3k
        p->mark = _mark;
1795
38.3k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1796
38.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'assert' assert_stmt"));
1797
38.3k
    }
1798
0
    { // &'break' break_stmt
1799
38.3k
        if (p->error_indicator) {
1800
36
            p->level--;
1801
36
            return NULL;
1802
36
        }
1803
38.2k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'break' break_stmt"));
1804
38.2k
        stmt_ty break_stmt_var;
1805
38.2k
        if (
1806
38.2k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 528)  // token='break'
1807
38.2k
            &&
1808
38.2k
            (break_stmt_var = break_stmt_rule(p))  // break_stmt
1809
38.2k
        )
1810
1.35k
        {
1811
1.35k
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'break' break_stmt"));
1812
1.35k
            _res = break_stmt_var;
1813
1.35k
            goto done;
1814
1.35k
        }
1815
36.9k
        p->mark = _mark;
1816
36.9k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1817
36.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'break' break_stmt"));
1818
36.9k
    }
1819
0
    { // &'continue' continue_stmt
1820
36.9k
        if (p->error_indicator) {
1821
0
            p->level--;
1822
0
            return NULL;
1823
0
        }
1824
36.9k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'continue' continue_stmt"));
1825
36.9k
        stmt_ty continue_stmt_var;
1826
36.9k
        if (
1827
36.9k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 529)  // token='continue'
1828
36.9k
            &&
1829
36.9k
            (continue_stmt_var = continue_stmt_rule(p))  // continue_stmt
1830
36.9k
        )
1831
1.03k
        {
1832
1.03k
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'continue' continue_stmt"));
1833
1.03k
            _res = continue_stmt_var;
1834
1.03k
            goto done;
1835
1.03k
        }
1836
35.8k
        p->mark = _mark;
1837
35.8k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1838
35.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'continue' continue_stmt"));
1839
35.8k
    }
1840
0
    { // &'global' global_stmt
1841
35.8k
        if (p->error_indicator) {
1842
0
            p->level--;
1843
0
            return NULL;
1844
0
        }
1845
35.8k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
1846
35.8k
        stmt_ty global_stmt_var;
1847
35.8k
        if (
1848
35.8k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 530)  // token='global'
1849
35.8k
            &&
1850
35.8k
            (global_stmt_var = global_stmt_rule(p))  // global_stmt
1851
35.8k
        )
1852
609
        {
1853
609
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
1854
609
            _res = global_stmt_var;
1855
609
            goto done;
1856
609
        }
1857
35.2k
        p->mark = _mark;
1858
35.2k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1859
35.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'global' global_stmt"));
1860
35.2k
    }
1861
0
    { // &'nonlocal' nonlocal_stmt
1862
35.2k
        if (p->error_indicator) {
1863
1
            p->level--;
1864
1
            return NULL;
1865
1
        }
1866
35.2k
        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
1867
35.2k
        stmt_ty nonlocal_stmt_var;
1868
35.2k
        if (
1869
35.2k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 531)  // token='nonlocal'
1870
35.2k
            &&
1871
35.2k
            (nonlocal_stmt_var = nonlocal_stmt_rule(p))  // nonlocal_stmt
1872
35.2k
        )
1873
733
        {
1874
733
            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
1875
733
            _res = nonlocal_stmt_var;
1876
733
            goto done;
1877
733
        }
1878
34.5k
        p->mark = _mark;
1879
34.5k
        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1880
34.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
1881
34.5k
    }
1882
0
    _res = NULL;
1883
167k
  done:
1884
167k
    _PyPegen_insert_memo(p, _mark, simple_stmt_type, _res);
1885
167k
    p->level--;
1886
167k
    return _res;
1887
34.5k
}
1888
1889
// compound_stmt:
1890
//     | &('def' | '@' | 'async') function_def
1891
//     | &'if' if_stmt
1892
//     | &('class' | '@') class_def
1893
//     | &('with' | 'async') with_stmt
1894
//     | &('for' | 'async') for_stmt
1895
//     | &'try' try_stmt
1896
//     | &'while' while_stmt
1897
//     | match_stmt
1898
static stmt_ty
1899
compound_stmt_rule(Parser *p)
1900
156k
{
1901
156k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
1902
0
        _Pypegen_stack_overflow(p);
1903
0
    }
1904
156k
    if (p->error_indicator) {
1905
0
        p->level--;
1906
0
        return NULL;
1907
0
    }
1908
156k
    stmt_ty _res = NULL;
1909
156k
    int _mark = p->mark;
1910
156k
    { // &('def' | '@' | 'async') function_def
1911
156k
        if (p->error_indicator) {
1912
0
            p->level--;
1913
0
            return NULL;
1914
0
        }
1915
156k
        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | 'async') function_def"));
1916
156k
        stmt_ty function_def_var;
1917
156k
        if (
1918
156k
            _PyPegen_lookahead(1, _tmp_6_rule, p)
1919
156k
            &&
1920
156k
            (function_def_var = function_def_rule(p))  // function_def
1921
156k
        )
1922
9.77k
        {
1923
9.77k
            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | 'async') function_def"));
1924
9.77k
            _res = function_def_var;
1925
9.77k
            goto done;
1926
9.77k
        }
1927
146k
        p->mark = _mark;
1928
146k
        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1929
146k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('def' | '@' | 'async') function_def"));
1930
146k
    }
1931
0
    { // &'if' if_stmt
1932
146k
        if (p->error_indicator) {
1933
1.45k
            p->level--;
1934
1.45k
            return NULL;
1935
1.45k
        }
1936
145k
        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'if' if_stmt"));
1937
145k
        stmt_ty if_stmt_var;
1938
145k
        if (
1939
145k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 687)  // token='if'
1940
145k
            &&
1941
145k
            (if_stmt_var = if_stmt_rule(p))  // if_stmt
1942
145k
        )
1943
7.51k
        {
1944
7.51k
            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'if' if_stmt"));
1945
7.51k
            _res = if_stmt_var;
1946
7.51k
            goto done;
1947
7.51k
        }
1948
137k
        p->mark = _mark;
1949
137k
        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1950
137k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'if' if_stmt"));
1951
137k
    }
1952
0
    { // &('class' | '@') class_def
1953
137k
        if (p->error_indicator) {
1954
57
            p->level--;
1955
57
            return NULL;
1956
57
        }
1957
137k
        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def"));
1958
137k
        stmt_ty class_def_var;
1959
137k
        if (
1960
137k
            _PyPegen_lookahead(1, _tmp_7_rule, p)
1961
137k
            &&
1962
137k
            (class_def_var = class_def_rule(p))  // class_def
1963
137k
        )
1964
3.46k
        {
1965
3.46k
            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def"));
1966
3.46k
            _res = class_def_var;
1967
3.46k
            goto done;
1968
3.46k
        }
1969
134k
        p->mark = _mark;
1970
134k
        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1971
134k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('class' | '@') class_def"));
1972
134k
    }
1973
0
    { // &('with' | 'async') with_stmt
1974
134k
        if (p->error_indicator) {
1975
45
            p->level--;
1976
45
            return NULL;
1977
45
        }
1978
134k
        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('with' | 'async') with_stmt"));
1979
134k
        stmt_ty with_stmt_var;
1980
134k
        if (
1981
134k
            _PyPegen_lookahead(1, _tmp_8_rule, p)
1982
134k
            &&
1983
134k
            (with_stmt_var = with_stmt_rule(p))  // with_stmt
1984
134k
        )
1985
4.00k
        {
1986
4.00k
            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('with' | 'async') with_stmt"));
1987
4.00k
            _res = with_stmt_var;
1988
4.00k
            goto done;
1989
4.00k
        }
1990
130k
        p->mark = _mark;
1991
130k
        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
1992
130k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('with' | 'async') with_stmt"));
1993
130k
    }
1994
0
    { // &('for' | 'async') for_stmt
1995
130k
        if (p->error_indicator) {
1996
127
            p->level--;
1997
127
            return NULL;
1998
127
        }
1999
130k
        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('for' | 'async') for_stmt"));
2000
130k
        stmt_ty for_stmt_var;
2001
130k
        if (
2002
130k
            _PyPegen_lookahead(1, _tmp_9_rule, p)
2003
130k
            &&
2004
130k
            (for_stmt_var = for_stmt_rule(p))  // for_stmt
2005
130k
        )
2006
1.81k
        {
2007
1.81k
            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('for' | 'async') for_stmt"));
2008
1.81k
            _res = for_stmt_var;
2009
1.81k
            goto done;
2010
1.81k
        }
2011
128k
        p->mark = _mark;
2012
128k
        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2013
128k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('for' | 'async') for_stmt"));
2014
128k
    }
2015
0
    { // &'try' try_stmt
2016
128k
        if (p->error_indicator) {
2017
38
            p->level--;
2018
38
            return NULL;
2019
38
        }
2020
128k
        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'try' try_stmt"));
2021
128k
        stmt_ty try_stmt_var;
2022
128k
        if (
2023
128k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 661)  // token='try'
2024
128k
            &&
2025
128k
            (try_stmt_var = try_stmt_rule(p))  // try_stmt
2026
128k
        )
2027
4.65k
        {
2028
4.65k
            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'try' try_stmt"));
2029
4.65k
            _res = try_stmt_var;
2030
4.65k
            goto done;
2031
4.65k
        }
2032
123k
        p->mark = _mark;
2033
123k
        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2034
123k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'try' try_stmt"));
2035
123k
    }
2036
0
    { // &'while' while_stmt
2037
123k
        if (p->error_indicator) {
2038
169
            p->level--;
2039
169
            return NULL;
2040
169
        }
2041
123k
        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'while' while_stmt"));
2042
123k
        stmt_ty while_stmt_var;
2043
123k
        if (
2044
123k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 694)  // token='while'
2045
123k
            &&
2046
123k
            (while_stmt_var = while_stmt_rule(p))  // while_stmt
2047
123k
        )
2048
1.15k
        {
2049
1.15k
            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'while' while_stmt"));
2050
1.15k
            _res = while_stmt_var;
2051
1.15k
            goto done;
2052
1.15k
        }
2053
122k
        p->mark = _mark;
2054
122k
        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2055
122k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'while' while_stmt"));
2056
122k
    }
2057
0
    { // match_stmt
2058
122k
        if (p->error_indicator) {
2059
22
            p->level--;
2060
22
            return NULL;
2061
22
        }
2062
122k
        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "match_stmt"));
2063
122k
        stmt_ty match_stmt_var;
2064
122k
        if (
2065
122k
            (match_stmt_var = match_stmt_rule(p))  // match_stmt
2066
122k
        )
2067
591
        {
2068
591
            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "match_stmt"));
2069
591
            _res = match_stmt_var;
2070
591
            goto done;
2071
591
        }
2072
121k
        p->mark = _mark;
2073
121k
        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2074
121k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "match_stmt"));
2075
121k
    }
2076
0
    _res = NULL;
2077
154k
  done:
2078
154k
    p->level--;
2079
154k
    return _res;
2080
121k
}
2081
2082
// assignment:
2083
//     | NAME ':' expression ['=' annotated_rhs]
2084
//     | ('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]
2085
//     | ((star_targets '='))+ annotated_rhs !'=' TYPE_COMMENT?
2086
//     | single_target augassign ~ annotated_rhs
2087
//     | invalid_assignment
2088
static stmt_ty
2089
assignment_rule(Parser *p)
2090
172k
{
2091
172k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
2092
0
        _Pypegen_stack_overflow(p);
2093
0
    }
2094
172k
    if (p->error_indicator) {
2095
0
        p->level--;
2096
0
        return NULL;
2097
0
    }
2098
172k
    stmt_ty _res = NULL;
2099
172k
    int _mark = p->mark;
2100
172k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
2101
0
        p->error_indicator = 1;
2102
0
        p->level--;
2103
0
        return NULL;
2104
0
    }
2105
172k
    int _start_lineno = p->tokens[_mark]->lineno;
2106
172k
    UNUSED(_start_lineno); // Only used by EXTRA macro
2107
172k
    int _start_col_offset = p->tokens[_mark]->col_offset;
2108
172k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
2109
172k
    { // NAME ':' expression ['=' annotated_rhs]
2110
172k
        if (p->error_indicator) {
2111
0
            p->level--;
2112
0
            return NULL;
2113
0
        }
2114
172k
        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
2115
172k
        Token * _literal;
2116
172k
        expr_ty a;
2117
172k
        expr_ty b;
2118
172k
        void *c;
2119
172k
        if (
2120
172k
            (a = _PyPegen_name_token(p))  // NAME
2121
172k
            &&
2122
172k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
2123
172k
            &&
2124
172k
            (b = expression_rule(p))  // expression
2125
172k
            &&
2126
172k
            (c = _tmp_10_rule(p), !p->error_indicator)  // ['=' annotated_rhs]
2127
172k
        )
2128
2.17k
        {
2129
2.17k
            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
2130
2.17k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
2131
2.17k
            if (_token == NULL) {
2132
0
                p->level--;
2133
0
                return NULL;
2134
0
            }
2135
2.17k
            int _end_lineno = _token->end_lineno;
2136
2.17k
            UNUSED(_end_lineno); // Only used by EXTRA macro
2137
2.17k
            int _end_col_offset = _token->end_col_offset;
2138
2.17k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
2139
2.17k
            _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotation syntax is" , _PyAST_AnnAssign ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , c , 1 , EXTRA ) );
2140
2.17k
            if (_res == NULL && PyErr_Occurred()) {
2141
0
                p->error_indicator = 1;
2142
0
                p->level--;
2143
0
                return NULL;
2144
0
            }
2145
2.17k
            goto done;
2146
2.17k
        }
2147
170k
        p->mark = _mark;
2148
170k
        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
2149
170k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
2150
170k
    }
2151
0
    { // ('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]
2152
170k
        if (p->error_indicator) {
2153
165
            p->level--;
2154
165
            return NULL;
2155
165
        }
2156
170k
        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]"));
2157
170k
        Token * _literal;
2158
170k
        void *a;
2159
170k
        expr_ty b;
2160
170k
        void *c;
2161
170k
        if (
2162
170k
            (a = _tmp_11_rule(p))  // '(' single_target ')' | single_subscript_attribute_target
2163
170k
            &&
2164
170k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
2165
170k
            &&
2166
170k
            (b = expression_rule(p))  // expression
2167
170k
            &&
2168
170k
            (c = _tmp_10_rule(p), !p->error_indicator)  // ['=' annotated_rhs]
2169
170k
        )
2170
1.05k
        {
2171
1.05k
            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]"));
2172
1.05k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
2173
1.05k
            if (_token == NULL) {
2174
0
                p->level--;
2175
0
                return NULL;
2176
0
            }
2177
1.05k
            int _end_lineno = _token->end_lineno;
2178
1.05k
            UNUSED(_end_lineno); // Only used by EXTRA macro
2179
1.05k
            int _end_col_offset = _token->end_col_offset;
2180
1.05k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
2181
1.05k
            _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotations syntax is" , _PyAST_AnnAssign ( a , b , c , 0 , EXTRA ) );
2182
1.05k
            if (_res == NULL && PyErr_Occurred()) {
2183
0
                p->error_indicator = 1;
2184
0
                p->level--;
2185
0
                return NULL;
2186
0
            }
2187
1.05k
            goto done;
2188
1.05k
        }
2189
169k
        p->mark = _mark;
2190
169k
        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
2191
169k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]"));
2192
169k
    }
2193
0
    { // ((star_targets '='))+ annotated_rhs !'=' TYPE_COMMENT?
2194
169k
        if (p->error_indicator) {
2195
2.63k
            p->level--;
2196
2.63k
            return NULL;
2197
2.63k
        }
2198
166k
        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))+ annotated_rhs !'=' TYPE_COMMENT?"));
2199
166k
        asdl_expr_seq* a;
2200
166k
        expr_ty b;
2201
166k
        void *tc;
2202
166k
        if (
2203
166k
            (a = (asdl_expr_seq*)_loop1_12_rule(p))  // ((star_targets '='))+
2204
166k
            &&
2205
166k
            (b = annotated_rhs_rule(p))  // annotated_rhs
2206
166k
            &&
2207
166k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22)  // token='='
2208
166k
            &&
2209
166k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
2210
166k
        )
2211
12.8k
        {
2212
12.8k
            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))+ annotated_rhs !'=' TYPE_COMMENT?"));
2213
12.8k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
2214
12.8k
            if (_token == NULL) {
2215
0
                p->level--;
2216
0
                return NULL;
2217
0
            }
2218
12.8k
            int _end_lineno = _token->end_lineno;
2219
12.8k
            UNUSED(_end_lineno); // Only used by EXTRA macro
2220
12.8k
            int _end_col_offset = _token->end_col_offset;
2221
12.8k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
2222
12.8k
            _res = _PyAST_Assign ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
2223
12.8k
            if (_res == NULL && PyErr_Occurred()) {
2224
0
                p->error_indicator = 1;
2225
0
                p->level--;
2226
0
                return NULL;
2227
0
            }
2228
12.8k
            goto done;
2229
12.8k
        }
2230
153k
        p->mark = _mark;
2231
153k
        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
2232
153k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))+ annotated_rhs !'=' TYPE_COMMENT?"));
2233
153k
    }
2234
0
    { // single_target augassign ~ annotated_rhs
2235
153k
        if (p->error_indicator) {
2236
262
            p->level--;
2237
262
            return NULL;
2238
262
        }
2239
153k
        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ annotated_rhs"));
2240
153k
        int _cut_var = 0;
2241
153k
        expr_ty a;
2242
153k
        AugOperator* b;
2243
153k
        expr_ty c;
2244
153k
        if (
2245
153k
            (a = single_target_rule(p))  // single_target
2246
153k
            &&
2247
153k
            (b = augassign_rule(p))  // augassign
2248
153k
            &&
2249
153k
            (_cut_var = 1)
2250
153k
            &&
2251
153k
            (c = annotated_rhs_rule(p))  // annotated_rhs
2252
153k
        )
2253
2.48k
        {
2254
2.48k
            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ annotated_rhs"));
2255
2.48k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
2256
2.48k
            if (_token == NULL) {
2257
0
                p->level--;
2258
0
                return NULL;
2259
0
            }
2260
2.48k
            int _end_lineno = _token->end_lineno;
2261
2.48k
            UNUSED(_end_lineno); // Only used by EXTRA macro
2262
2.48k
            int _end_col_offset = _token->end_col_offset;
2263
2.48k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
2264
2.48k
            _res = _PyAST_AugAssign ( a , b -> kind , c , EXTRA );
2265
2.48k
            if (_res == NULL && PyErr_Occurred()) {
2266
0
                p->error_indicator = 1;
2267
0
                p->level--;
2268
0
                return NULL;
2269
0
            }
2270
2.48k
            goto done;
2271
2.48k
        }
2272
150k
        p->mark = _mark;
2273
150k
        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
2274
150k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_target augassign ~ annotated_rhs"));
2275
150k
        if (_cut_var) {
2276
128
            p->level--;
2277
128
            return NULL;
2278
128
        }
2279
150k
    }
2280
150k
    if (p->call_invalid_rules) { // invalid_assignment
2281
35.8k
        if (p->error_indicator) {
2282
0
            p->level--;
2283
0
            return NULL;
2284
0
        }
2285
35.8k
        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_assignment"));
2286
35.8k
        void *invalid_assignment_var;
2287
35.8k
        if (
2288
35.8k
            (invalid_assignment_var = invalid_assignment_rule(p))  // invalid_assignment
2289
35.8k
        )
2290
0
        {
2291
0
            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_assignment"));
2292
0
            _res = invalid_assignment_var;
2293
0
            goto done;
2294
0
        }
2295
35.8k
        p->mark = _mark;
2296
35.8k
        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
2297
35.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_assignment"));
2298
35.8k
    }
2299
150k
    _res = NULL;
2300
169k
  done:
2301
169k
    p->level--;
2302
169k
    return _res;
2303
150k
}
2304
2305
// annotated_rhs: yield_expr | star_expressions
2306
static expr_ty
2307
annotated_rhs_rule(Parser *p)
2308
45.4k
{
2309
45.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
2310
1
        _Pypegen_stack_overflow(p);
2311
1
    }
2312
45.4k
    if (p->error_indicator) {
2313
1
        p->level--;
2314
1
        return NULL;
2315
1
    }
2316
45.4k
    expr_ty _res = NULL;
2317
45.4k
    int _mark = p->mark;
2318
45.4k
    { // yield_expr
2319
45.4k
        if (p->error_indicator) {
2320
0
            p->level--;
2321
0
            return NULL;
2322
0
        }
2323
45.4k
        D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
2324
45.4k
        expr_ty yield_expr_var;
2325
45.4k
        if (
2326
45.4k
            (yield_expr_var = yield_expr_rule(p))  // yield_expr
2327
45.4k
        )
2328
315
        {
2329
315
            D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
2330
315
            _res = yield_expr_var;
2331
315
            goto done;
2332
315
        }
2333
45.1k
        p->mark = _mark;
2334
45.1k
        D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ',
2335
45.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
2336
45.1k
    }
2337
0
    { // star_expressions
2338
45.1k
        if (p->error_indicator) {
2339
114
            p->level--;
2340
114
            return NULL;
2341
114
        }
2342
45.0k
        D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
2343
45.0k
        expr_ty star_expressions_var;
2344
45.0k
        if (
2345
45.0k
            (star_expressions_var = star_expressions_rule(p))  // star_expressions
2346
45.0k
        )
2347
40.6k
        {
2348
40.6k
            D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
2349
40.6k
            _res = star_expressions_var;
2350
40.6k
            goto done;
2351
40.6k
        }
2352
4.46k
        p->mark = _mark;
2353
4.46k
        D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ',
2354
4.46k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
2355
4.46k
    }
2356
0
    _res = NULL;
2357
45.3k
  done:
2358
45.3k
    p->level--;
2359
45.3k
    return _res;
2360
4.46k
}
2361
2362
// augassign:
2363
//     | '+='
2364
//     | '-='
2365
//     | '*='
2366
//     | '@='
2367
//     | '/='
2368
//     | '%='
2369
//     | '&='
2370
//     | '|='
2371
//     | '^='
2372
//     | '<<='
2373
//     | '>>='
2374
//     | '**='
2375
//     | '//='
2376
static AugOperator*
2377
augassign_rule(Parser *p)
2378
89.2k
{
2379
89.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
2380
0
        _Pypegen_stack_overflow(p);
2381
0
    }
2382
89.2k
    if (p->error_indicator) {
2383
0
        p->level--;
2384
0
        return NULL;
2385
0
    }
2386
89.2k
    AugOperator* _res = NULL;
2387
89.2k
    int _mark = p->mark;
2388
89.2k
    { // '+='
2389
89.2k
        if (p->error_indicator) {
2390
0
            p->level--;
2391
0
            return NULL;
2392
0
        }
2393
89.2k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+='"));
2394
89.2k
        Token * _literal;
2395
89.2k
        if (
2396
89.2k
            (_literal = _PyPegen_expect_token(p, 36))  // token='+='
2397
89.2k
        )
2398
449
        {
2399
449
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+='"));
2400
449
            _res = _PyPegen_augoperator ( p , Add );
2401
449
            if (_res == NULL && PyErr_Occurred()) {
2402
0
                p->error_indicator = 1;
2403
0
                p->level--;
2404
0
                return NULL;
2405
0
            }
2406
449
            goto done;
2407
449
        }
2408
88.7k
        p->mark = _mark;
2409
88.7k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2410
88.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+='"));
2411
88.7k
    }
2412
0
    { // '-='
2413
88.7k
        if (p->error_indicator) {
2414
0
            p->level--;
2415
0
            return NULL;
2416
0
        }
2417
88.7k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-='"));
2418
88.7k
        Token * _literal;
2419
88.7k
        if (
2420
88.7k
            (_literal = _PyPegen_expect_token(p, 37))  // token='-='
2421
88.7k
        )
2422
124
        {
2423
124
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-='"));
2424
124
            _res = _PyPegen_augoperator ( p , Sub );
2425
124
            if (_res == NULL && PyErr_Occurred()) {
2426
0
                p->error_indicator = 1;
2427
0
                p->level--;
2428
0
                return NULL;
2429
0
            }
2430
124
            goto done;
2431
124
        }
2432
88.6k
        p->mark = _mark;
2433
88.6k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2434
88.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-='"));
2435
88.6k
    }
2436
0
    { // '*='
2437
88.6k
        if (p->error_indicator) {
2438
0
            p->level--;
2439
0
            return NULL;
2440
0
        }
2441
88.6k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*='"));
2442
88.6k
        Token * _literal;
2443
88.6k
        if (
2444
88.6k
            (_literal = _PyPegen_expect_token(p, 38))  // token='*='
2445
88.6k
        )
2446
274
        {
2447
274
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*='"));
2448
274
            _res = _PyPegen_augoperator ( p , Mult );
2449
274
            if (_res == NULL && PyErr_Occurred()) {
2450
0
                p->error_indicator = 1;
2451
0
                p->level--;
2452
0
                return NULL;
2453
0
            }
2454
274
            goto done;
2455
274
        }
2456
88.3k
        p->mark = _mark;
2457
88.3k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2458
88.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*='"));
2459
88.3k
    }
2460
0
    { // '@='
2461
88.3k
        if (p->error_indicator) {
2462
0
            p->level--;
2463
0
            return NULL;
2464
0
        }
2465
88.3k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@='"));
2466
88.3k
        Token * _literal;
2467
88.3k
        if (
2468
88.3k
            (_literal = _PyPegen_expect_token(p, 50))  // token='@='
2469
88.3k
        )
2470
75
        {
2471
75
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@='"));
2472
75
            _res = CHECK_VERSION ( AugOperator* , 5 , "The '@' operator is" , _PyPegen_augoperator ( p , MatMult ) );
2473
75
            if (_res == NULL && PyErr_Occurred()) {
2474
0
                p->error_indicator = 1;
2475
0
                p->level--;
2476
0
                return NULL;
2477
0
            }
2478
75
            goto done;
2479
75
        }
2480
88.2k
        p->mark = _mark;
2481
88.2k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2482
88.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@='"));
2483
88.2k
    }
2484
0
    { // '/='
2485
88.2k
        if (p->error_indicator) {
2486
0
            p->level--;
2487
0
            return NULL;
2488
0
        }
2489
88.2k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/='"));
2490
88.2k
        Token * _literal;
2491
88.2k
        if (
2492
88.2k
            (_literal = _PyPegen_expect_token(p, 39))  // token='/='
2493
88.2k
        )
2494
380
        {
2495
380
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/='"));
2496
380
            _res = _PyPegen_augoperator ( p , Div );
2497
380
            if (_res == NULL && PyErr_Occurred()) {
2498
0
                p->error_indicator = 1;
2499
0
                p->level--;
2500
0
                return NULL;
2501
0
            }
2502
380
            goto done;
2503
380
        }
2504
87.9k
        p->mark = _mark;
2505
87.9k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2506
87.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/='"));
2507
87.9k
    }
2508
0
    { // '%='
2509
87.9k
        if (p->error_indicator) {
2510
0
            p->level--;
2511
0
            return NULL;
2512
0
        }
2513
87.9k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'%='"));
2514
87.9k
        Token * _literal;
2515
87.9k
        if (
2516
87.9k
            (_literal = _PyPegen_expect_token(p, 40))  // token='%='
2517
87.9k
        )
2518
328
        {
2519
328
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'%='"));
2520
328
            _res = _PyPegen_augoperator ( p , Mod );
2521
328
            if (_res == NULL && PyErr_Occurred()) {
2522
0
                p->error_indicator = 1;
2523
0
                p->level--;
2524
0
                return NULL;
2525
0
            }
2526
328
            goto done;
2527
328
        }
2528
87.5k
        p->mark = _mark;
2529
87.5k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2530
87.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'%='"));
2531
87.5k
    }
2532
0
    { // '&='
2533
87.5k
        if (p->error_indicator) {
2534
0
            p->level--;
2535
0
            return NULL;
2536
0
        }
2537
87.5k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'&='"));
2538
87.5k
        Token * _literal;
2539
87.5k
        if (
2540
87.5k
            (_literal = _PyPegen_expect_token(p, 41))  // token='&='
2541
87.5k
        )
2542
238
        {
2543
238
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'&='"));
2544
238
            _res = _PyPegen_augoperator ( p , BitAnd );
2545
238
            if (_res == NULL && PyErr_Occurred()) {
2546
0
                p->error_indicator = 1;
2547
0
                p->level--;
2548
0
                return NULL;
2549
0
            }
2550
238
            goto done;
2551
238
        }
2552
87.3k
        p->mark = _mark;
2553
87.3k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2554
87.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'&='"));
2555
87.3k
    }
2556
0
    { // '|='
2557
87.3k
        if (p->error_indicator) {
2558
0
            p->level--;
2559
0
            return NULL;
2560
0
        }
2561
87.3k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|='"));
2562
87.3k
        Token * _literal;
2563
87.3k
        if (
2564
87.3k
            (_literal = _PyPegen_expect_token(p, 42))  // token='|='
2565
87.3k
        )
2566
274
        {
2567
274
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|='"));
2568
274
            _res = _PyPegen_augoperator ( p , BitOr );
2569
274
            if (_res == NULL && PyErr_Occurred()) {
2570
0
                p->error_indicator = 1;
2571
0
                p->level--;
2572
0
                return NULL;
2573
0
            }
2574
274
            goto done;
2575
274
        }
2576
87.0k
        p->mark = _mark;
2577
87.0k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2578
87.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|='"));
2579
87.0k
    }
2580
0
    { // '^='
2581
87.0k
        if (p->error_indicator) {
2582
0
            p->level--;
2583
0
            return NULL;
2584
0
        }
2585
87.0k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'^='"));
2586
87.0k
        Token * _literal;
2587
87.0k
        if (
2588
87.0k
            (_literal = _PyPegen_expect_token(p, 43))  // token='^='
2589
87.0k
        )
2590
105
        {
2591
105
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'^='"));
2592
105
            _res = _PyPegen_augoperator ( p , BitXor );
2593
105
            if (_res == NULL && PyErr_Occurred()) {
2594
0
                p->error_indicator = 1;
2595
0
                p->level--;
2596
0
                return NULL;
2597
0
            }
2598
105
            goto done;
2599
105
        }
2600
86.9k
        p->mark = _mark;
2601
86.9k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2602
86.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'^='"));
2603
86.9k
    }
2604
0
    { // '<<='
2605
86.9k
        if (p->error_indicator) {
2606
0
            p->level--;
2607
0
            return NULL;
2608
0
        }
2609
86.9k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<<='"));
2610
86.9k
        Token * _literal;
2611
86.9k
        if (
2612
86.9k
            (_literal = _PyPegen_expect_token(p, 44))  // token='<<='
2613
86.9k
        )
2614
116
        {
2615
116
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<<='"));
2616
116
            _res = _PyPegen_augoperator ( p , LShift );
2617
116
            if (_res == NULL && PyErr_Occurred()) {
2618
0
                p->error_indicator = 1;
2619
0
                p->level--;
2620
0
                return NULL;
2621
0
            }
2622
116
            goto done;
2623
116
        }
2624
86.8k
        p->mark = _mark;
2625
86.8k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2626
86.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<<='"));
2627
86.8k
    }
2628
0
    { // '>>='
2629
86.8k
        if (p->error_indicator) {
2630
0
            p->level--;
2631
0
            return NULL;
2632
0
        }
2633
86.8k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>>='"));
2634
86.8k
        Token * _literal;
2635
86.8k
        if (
2636
86.8k
            (_literal = _PyPegen_expect_token(p, 45))  // token='>>='
2637
86.8k
        )
2638
72
        {
2639
72
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>>='"));
2640
72
            _res = _PyPegen_augoperator ( p , RShift );
2641
72
            if (_res == NULL && PyErr_Occurred()) {
2642
0
                p->error_indicator = 1;
2643
0
                p->level--;
2644
0
                return NULL;
2645
0
            }
2646
72
            goto done;
2647
72
        }
2648
86.7k
        p->mark = _mark;
2649
86.7k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2650
86.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>>='"));
2651
86.7k
    }
2652
0
    { // '**='
2653
86.7k
        if (p->error_indicator) {
2654
0
            p->level--;
2655
0
            return NULL;
2656
0
        }
2657
86.7k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**='"));
2658
86.7k
        Token * _literal;
2659
86.7k
        if (
2660
86.7k
            (_literal = _PyPegen_expect_token(p, 46))  // token='**='
2661
86.7k
        )
2662
81
        {
2663
81
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**='"));
2664
81
            _res = _PyPegen_augoperator ( p , Pow );
2665
81
            if (_res == NULL && PyErr_Occurred()) {
2666
0
                p->error_indicator = 1;
2667
0
                p->level--;
2668
0
                return NULL;
2669
0
            }
2670
81
            goto done;
2671
81
        }
2672
86.6k
        p->mark = _mark;
2673
86.6k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2674
86.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**='"));
2675
86.6k
    }
2676
0
    { // '//='
2677
86.6k
        if (p->error_indicator) {
2678
0
            p->level--;
2679
0
            return NULL;
2680
0
        }
2681
86.6k
        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'//='"));
2682
86.6k
        Token * _literal;
2683
86.6k
        if (
2684
86.6k
            (_literal = _PyPegen_expect_token(p, 48))  // token='//='
2685
86.6k
        )
2686
257
        {
2687
257
            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'//='"));
2688
257
            _res = _PyPegen_augoperator ( p , FloorDiv );
2689
257
            if (_res == NULL && PyErr_Occurred()) {
2690
0
                p->error_indicator = 1;
2691
0
                p->level--;
2692
0
                return NULL;
2693
0
            }
2694
257
            goto done;
2695
257
        }
2696
86.4k
        p->mark = _mark;
2697
86.4k
        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
2698
86.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'//='"));
2699
86.4k
    }
2700
0
    _res = NULL;
2701
89.2k
  done:
2702
89.2k
    p->level--;
2703
89.2k
    return _res;
2704
86.4k
}
2705
2706
// return_stmt: 'return' star_expressions?
2707
static stmt_ty
2708
return_stmt_rule(Parser *p)
2709
7.45k
{
2710
7.45k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
2711
0
        _Pypegen_stack_overflow(p);
2712
0
    }
2713
7.45k
    if (p->error_indicator) {
2714
0
        p->level--;
2715
0
        return NULL;
2716
0
    }
2717
7.45k
    stmt_ty _res = NULL;
2718
7.45k
    int _mark = p->mark;
2719
7.45k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
2720
0
        p->error_indicator = 1;
2721
0
        p->level--;
2722
0
        return NULL;
2723
0
    }
2724
7.45k
    int _start_lineno = p->tokens[_mark]->lineno;
2725
7.45k
    UNUSED(_start_lineno); // Only used by EXTRA macro
2726
7.45k
    int _start_col_offset = p->tokens[_mark]->col_offset;
2727
7.45k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
2728
7.45k
    { // 'return' star_expressions?
2729
7.45k
        if (p->error_indicator) {
2730
0
            p->level--;
2731
0
            return NULL;
2732
0
        }
2733
7.45k
        D(fprintf(stderr, "%*c> return_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?"));
2734
7.45k
        Token * _keyword;
2735
7.45k
        void *a;
2736
7.45k
        if (
2737
7.45k
            (_keyword = _PyPegen_expect_token(p, 522))  // token='return'
2738
7.45k
            &&
2739
7.45k
            (a = star_expressions_rule(p), !p->error_indicator)  // star_expressions?
2740
7.45k
        )
2741
7.44k
        {
2742
7.44k
            D(fprintf(stderr, "%*c+ return_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?"));
2743
7.44k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
2744
7.44k
            if (_token == NULL) {
2745
0
                p->level--;
2746
0
                return NULL;
2747
0
            }
2748
7.44k
            int _end_lineno = _token->end_lineno;
2749
7.44k
            UNUSED(_end_lineno); // Only used by EXTRA macro
2750
7.44k
            int _end_col_offset = _token->end_col_offset;
2751
7.44k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
2752
7.44k
            _res = _PyAST_Return ( a , EXTRA );
2753
7.44k
            if (_res == NULL && PyErr_Occurred()) {
2754
0
                p->error_indicator = 1;
2755
0
                p->level--;
2756
0
                return NULL;
2757
0
            }
2758
7.44k
            goto done;
2759
7.44k
        }
2760
11
        p->mark = _mark;
2761
11
        D(fprintf(stderr, "%*c%s return_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2762
11
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'return' star_expressions?"));
2763
11
    }
2764
0
    _res = NULL;
2765
7.45k
  done:
2766
7.45k
    p->level--;
2767
7.45k
    return _res;
2768
11
}
2769
2770
// raise_stmt:
2771
//     | 'raise' expression 'from' expression
2772
//     | invalid_raise_stmt
2773
//     | 'raise' expression
2774
//     | 'raise'
2775
static stmt_ty
2776
raise_stmt_rule(Parser *p)
2777
3.52k
{
2778
3.52k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
2779
0
        _Pypegen_stack_overflow(p);
2780
0
    }
2781
3.52k
    if (p->error_indicator) {
2782
0
        p->level--;
2783
0
        return NULL;
2784
0
    }
2785
3.52k
    stmt_ty _res = NULL;
2786
3.52k
    int _mark = p->mark;
2787
3.52k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
2788
0
        p->error_indicator = 1;
2789
0
        p->level--;
2790
0
        return NULL;
2791
0
    }
2792
3.52k
    int _start_lineno = p->tokens[_mark]->lineno;
2793
3.52k
    UNUSED(_start_lineno); // Only used by EXTRA macro
2794
3.52k
    int _start_col_offset = p->tokens[_mark]->col_offset;
2795
3.52k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
2796
3.52k
    { // 'raise' expression 'from' expression
2797
3.52k
        if (p->error_indicator) {
2798
0
            p->level--;
2799
0
            return NULL;
2800
0
        }
2801
3.52k
        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression 'from' expression"));
2802
3.52k
        Token * _keyword;
2803
3.52k
        Token * _keyword_1;
2804
3.52k
        expr_ty a;
2805
3.52k
        expr_ty b;
2806
3.52k
        if (
2807
3.52k
            (_keyword = _PyPegen_expect_token(p, 628))  // token='raise'
2808
3.52k
            &&
2809
3.52k
            (a = expression_rule(p))  // expression
2810
3.52k
            &&
2811
3.52k
            (_keyword_1 = _PyPegen_expect_token(p, 638))  // token='from'
2812
3.52k
            &&
2813
3.52k
            (b = expression_rule(p))  // expression
2814
3.52k
        )
2815
599
        {
2816
599
            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression 'from' expression"));
2817
599
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
2818
599
            if (_token == NULL) {
2819
0
                p->level--;
2820
0
                return NULL;
2821
0
            }
2822
599
            int _end_lineno = _token->end_lineno;
2823
599
            UNUSED(_end_lineno); // Only used by EXTRA macro
2824
599
            int _end_col_offset = _token->end_col_offset;
2825
599
            UNUSED(_end_col_offset); // Only used by EXTRA macro
2826
599
            _res = _PyAST_Raise ( a , b , EXTRA );
2827
599
            if (_res == NULL && PyErr_Occurred()) {
2828
0
                p->error_indicator = 1;
2829
0
                p->level--;
2830
0
                return NULL;
2831
0
            }
2832
599
            goto done;
2833
599
        }
2834
2.92k
        p->mark = _mark;
2835
2.92k
        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2836
2.92k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' expression 'from' expression"));
2837
2.92k
    }
2838
2.92k
    if (p->call_invalid_rules) { // invalid_raise_stmt
2839
612
        if (p->error_indicator) {
2840
19
            p->level--;
2841
19
            return NULL;
2842
19
        }
2843
593
        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_raise_stmt"));
2844
593
        void *invalid_raise_stmt_var;
2845
593
        if (
2846
593
            (invalid_raise_stmt_var = invalid_raise_stmt_rule(p))  // invalid_raise_stmt
2847
593
        )
2848
0
        {
2849
0
            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_raise_stmt"));
2850
0
            _res = invalid_raise_stmt_var;
2851
0
            goto done;
2852
0
        }
2853
593
        p->mark = _mark;
2854
593
        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2855
593
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_raise_stmt"));
2856
593
    }
2857
2.90k
    { // 'raise' expression
2858
2.90k
        if (p->error_indicator) {
2859
6
            p->level--;
2860
6
            return NULL;
2861
6
        }
2862
2.90k
        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression"));
2863
2.90k
        Token * _keyword;
2864
2.90k
        expr_ty a;
2865
2.90k
        if (
2866
2.90k
            (_keyword = _PyPegen_expect_token(p, 628))  // token='raise'
2867
2.90k
            &&
2868
2.90k
            (a = expression_rule(p))  // expression
2869
2.90k
        )
2870
2.05k
        {
2871
2.05k
            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression"));
2872
2.05k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
2873
2.05k
            if (_token == NULL) {
2874
0
                p->level--;
2875
0
                return NULL;
2876
0
            }
2877
2.05k
            int _end_lineno = _token->end_lineno;
2878
2.05k
            UNUSED(_end_lineno); // Only used by EXTRA macro
2879
2.05k
            int _end_col_offset = _token->end_col_offset;
2880
2.05k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
2881
2.05k
            _res = _PyAST_Raise ( a , NULL , EXTRA );
2882
2.05k
            if (_res == NULL && PyErr_Occurred()) {
2883
0
                p->error_indicator = 1;
2884
0
                p->level--;
2885
0
                return NULL;
2886
0
            }
2887
2.05k
            goto done;
2888
2.05k
        }
2889
851
        p->mark = _mark;
2890
851
        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2891
851
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' expression"));
2892
851
    }
2893
0
    { // 'raise'
2894
851
        if (p->error_indicator) {
2895
0
            p->level--;
2896
0
            return NULL;
2897
0
        }
2898
851
        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise'"));
2899
851
        Token * _keyword;
2900
851
        if (
2901
851
            (_keyword = _PyPegen_expect_token(p, 628))  // token='raise'
2902
851
        )
2903
851
        {
2904
851
            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise'"));
2905
851
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
2906
851
            if (_token == NULL) {
2907
0
                p->level--;
2908
0
                return NULL;
2909
0
            }
2910
851
            int _end_lineno = _token->end_lineno;
2911
851
            UNUSED(_end_lineno); // Only used by EXTRA macro
2912
851
            int _end_col_offset = _token->end_col_offset;
2913
851
            UNUSED(_end_col_offset); // Only used by EXTRA macro
2914
851
            _res = _PyAST_Raise ( NULL , NULL , EXTRA );
2915
851
            if (_res == NULL && PyErr_Occurred()) {
2916
0
                p->error_indicator = 1;
2917
0
                p->level--;
2918
0
                return NULL;
2919
0
            }
2920
851
            goto done;
2921
851
        }
2922
0
        p->mark = _mark;
2923
0
        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2924
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise'"));
2925
0
    }
2926
0
    _res = NULL;
2927
3.50k
  done:
2928
3.50k
    p->level--;
2929
3.50k
    return _res;
2930
0
}
2931
2932
// pass_stmt: 'pass'
2933
static stmt_ty
2934
pass_stmt_rule(Parser *p)
2935
176k
{
2936
176k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
2937
0
        _Pypegen_stack_overflow(p);
2938
0
    }
2939
176k
    if (p->error_indicator) {
2940
0
        p->level--;
2941
0
        return NULL;
2942
0
    }
2943
176k
    stmt_ty _res = NULL;
2944
176k
    int _mark = p->mark;
2945
176k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
2946
0
        p->error_indicator = 1;
2947
0
        p->level--;
2948
0
        return NULL;
2949
0
    }
2950
176k
    int _start_lineno = p->tokens[_mark]->lineno;
2951
176k
    UNUSED(_start_lineno); // Only used by EXTRA macro
2952
176k
    int _start_col_offset = p->tokens[_mark]->col_offset;
2953
176k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
2954
176k
    { // 'pass'
2955
176k
        if (p->error_indicator) {
2956
0
            p->level--;
2957
0
            return NULL;
2958
0
        }
2959
176k
        D(fprintf(stderr, "%*c> pass_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'pass'"));
2960
176k
        Token * _keyword;
2961
176k
        if (
2962
176k
            (_keyword = _PyPegen_expect_token(p, 527))  // token='pass'
2963
176k
        )
2964
1.75k
        {
2965
1.75k
            D(fprintf(stderr, "%*c+ pass_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'pass'"));
2966
1.75k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
2967
1.75k
            if (_token == NULL) {
2968
0
                p->level--;
2969
0
                return NULL;
2970
0
            }
2971
1.75k
            int _end_lineno = _token->end_lineno;
2972
1.75k
            UNUSED(_end_lineno); // Only used by EXTRA macro
2973
1.75k
            int _end_col_offset = _token->end_col_offset;
2974
1.75k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
2975
1.75k
            _res = _PyAST_Pass ( EXTRA );
2976
1.75k
            if (_res == NULL && PyErr_Occurred()) {
2977
0
                p->error_indicator = 1;
2978
0
                p->level--;
2979
0
                return NULL;
2980
0
            }
2981
1.75k
            goto done;
2982
1.75k
        }
2983
174k
        p->mark = _mark;
2984
174k
        D(fprintf(stderr, "%*c%s pass_stmt[%d-%d]: %s failed!\n", p->level, ' ',
2985
174k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'pass'"));
2986
174k
    }
2987
0
    _res = NULL;
2988
176k
  done:
2989
176k
    p->level--;
2990
176k
    return _res;
2991
174k
}
2992
2993
// break_stmt: 'break'
2994
static stmt_ty
2995
break_stmt_rule(Parser *p)
2996
175k
{
2997
175k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
2998
0
        _Pypegen_stack_overflow(p);
2999
0
    }
3000
175k
    if (p->error_indicator) {
3001
0
        p->level--;
3002
0
        return NULL;
3003
0
    }
3004
175k
    stmt_ty _res = NULL;
3005
175k
    int _mark = p->mark;
3006
175k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3007
0
        p->error_indicator = 1;
3008
0
        p->level--;
3009
0
        return NULL;
3010
0
    }
3011
175k
    int _start_lineno = p->tokens[_mark]->lineno;
3012
175k
    UNUSED(_start_lineno); // Only used by EXTRA macro
3013
175k
    int _start_col_offset = p->tokens[_mark]->col_offset;
3014
175k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3015
175k
    { // 'break'
3016
175k
        if (p->error_indicator) {
3017
0
            p->level--;
3018
0
            return NULL;
3019
0
        }
3020
175k
        D(fprintf(stderr, "%*c> break_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'break'"));
3021
175k
        Token * _keyword;
3022
175k
        if (
3023
175k
            (_keyword = _PyPegen_expect_token(p, 528))  // token='break'
3024
175k
        )
3025
1.72k
        {
3026
1.72k
            D(fprintf(stderr, "%*c+ break_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'break'"));
3027
1.72k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3028
1.72k
            if (_token == NULL) {
3029
0
                p->level--;
3030
0
                return NULL;
3031
0
            }
3032
1.72k
            int _end_lineno = _token->end_lineno;
3033
1.72k
            UNUSED(_end_lineno); // Only used by EXTRA macro
3034
1.72k
            int _end_col_offset = _token->end_col_offset;
3035
1.72k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3036
1.72k
            _res = _PyAST_Break ( EXTRA );
3037
1.72k
            if (_res == NULL && PyErr_Occurred()) {
3038
0
                p->error_indicator = 1;
3039
0
                p->level--;
3040
0
                return NULL;
3041
0
            }
3042
1.72k
            goto done;
3043
1.72k
        }
3044
174k
        p->mark = _mark;
3045
174k
        D(fprintf(stderr, "%*c%s break_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3046
174k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'break'"));
3047
174k
    }
3048
0
    _res = NULL;
3049
175k
  done:
3050
175k
    p->level--;
3051
175k
    return _res;
3052
174k
}
3053
3054
// continue_stmt: 'continue'
3055
static stmt_ty
3056
continue_stmt_rule(Parser *p)
3057
175k
{
3058
175k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3059
0
        _Pypegen_stack_overflow(p);
3060
0
    }
3061
175k
    if (p->error_indicator) {
3062
0
        p->level--;
3063
0
        return NULL;
3064
0
    }
3065
175k
    stmt_ty _res = NULL;
3066
175k
    int _mark = p->mark;
3067
175k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3068
0
        p->error_indicator = 1;
3069
0
        p->level--;
3070
0
        return NULL;
3071
0
    }
3072
175k
    int _start_lineno = p->tokens[_mark]->lineno;
3073
175k
    UNUSED(_start_lineno); // Only used by EXTRA macro
3074
175k
    int _start_col_offset = p->tokens[_mark]->col_offset;
3075
175k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3076
175k
    { // 'continue'
3077
175k
        if (p->error_indicator) {
3078
0
            p->level--;
3079
0
            return NULL;
3080
0
        }
3081
175k
        D(fprintf(stderr, "%*c> continue_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'continue'"));
3082
175k
        Token * _keyword;
3083
175k
        if (
3084
175k
            (_keyword = _PyPegen_expect_token(p, 529))  // token='continue'
3085
175k
        )
3086
2.40k
        {
3087
2.40k
            D(fprintf(stderr, "%*c+ continue_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'continue'"));
3088
2.40k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3089
2.40k
            if (_token == NULL) {
3090
0
                p->level--;
3091
0
                return NULL;
3092
0
            }
3093
2.40k
            int _end_lineno = _token->end_lineno;
3094
2.40k
            UNUSED(_end_lineno); // Only used by EXTRA macro
3095
2.40k
            int _end_col_offset = _token->end_col_offset;
3096
2.40k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3097
2.40k
            _res = _PyAST_Continue ( EXTRA );
3098
2.40k
            if (_res == NULL && PyErr_Occurred()) {
3099
0
                p->error_indicator = 1;
3100
0
                p->level--;
3101
0
                return NULL;
3102
0
            }
3103
2.40k
            goto done;
3104
2.40k
        }
3105
172k
        p->mark = _mark;
3106
172k
        D(fprintf(stderr, "%*c%s continue_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3107
172k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'continue'"));
3108
172k
    }
3109
0
    _res = NULL;
3110
175k
  done:
3111
175k
    p->level--;
3112
175k
    return _res;
3113
172k
}
3114
3115
// global_stmt: 'global' ','.NAME+
3116
static stmt_ty
3117
global_stmt_rule(Parser *p)
3118
614
{
3119
614
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3120
0
        _Pypegen_stack_overflow(p);
3121
0
    }
3122
614
    if (p->error_indicator) {
3123
0
        p->level--;
3124
0
        return NULL;
3125
0
    }
3126
614
    stmt_ty _res = NULL;
3127
614
    int _mark = p->mark;
3128
614
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3129
0
        p->error_indicator = 1;
3130
0
        p->level--;
3131
0
        return NULL;
3132
0
    }
3133
614
    int _start_lineno = p->tokens[_mark]->lineno;
3134
614
    UNUSED(_start_lineno); // Only used by EXTRA macro
3135
614
    int _start_col_offset = p->tokens[_mark]->col_offset;
3136
614
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3137
614
    { // 'global' ','.NAME+
3138
614
        if (p->error_indicator) {
3139
0
            p->level--;
3140
0
            return NULL;
3141
0
        }
3142
614
        D(fprintf(stderr, "%*c> global_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+"));
3143
614
        Token * _keyword;
3144
614
        asdl_expr_seq* a;
3145
614
        if (
3146
614
            (_keyword = _PyPegen_expect_token(p, 530))  // token='global'
3147
614
            &&
3148
614
            (a = (asdl_expr_seq*)_gather_14_rule(p))  // ','.NAME+
3149
614
        )
3150
609
        {
3151
609
            D(fprintf(stderr, "%*c+ global_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+"));
3152
609
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3153
609
            if (_token == NULL) {
3154
0
                p->level--;
3155
0
                return NULL;
3156
0
            }
3157
609
            int _end_lineno = _token->end_lineno;
3158
609
            UNUSED(_end_lineno); // Only used by EXTRA macro
3159
609
            int _end_col_offset = _token->end_col_offset;
3160
609
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3161
609
            _res = _PyAST_Global ( CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
3162
609
            if (_res == NULL && PyErr_Occurred()) {
3163
0
                p->error_indicator = 1;
3164
0
                p->level--;
3165
0
                return NULL;
3166
0
            }
3167
609
            goto done;
3168
609
        }
3169
5
        p->mark = _mark;
3170
5
        D(fprintf(stderr, "%*c%s global_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3171
5
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'global' ','.NAME+"));
3172
5
    }
3173
0
    _res = NULL;
3174
614
  done:
3175
614
    p->level--;
3176
614
    return _res;
3177
5
}
3178
3179
// nonlocal_stmt: 'nonlocal' ','.NAME+
3180
static stmt_ty
3181
nonlocal_stmt_rule(Parser *p)
3182
736
{
3183
736
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3184
0
        _Pypegen_stack_overflow(p);
3185
0
    }
3186
736
    if (p->error_indicator) {
3187
0
        p->level--;
3188
0
        return NULL;
3189
0
    }
3190
736
    stmt_ty _res = NULL;
3191
736
    int _mark = p->mark;
3192
736
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3193
0
        p->error_indicator = 1;
3194
0
        p->level--;
3195
0
        return NULL;
3196
0
    }
3197
736
    int _start_lineno = p->tokens[_mark]->lineno;
3198
736
    UNUSED(_start_lineno); // Only used by EXTRA macro
3199
736
    int _start_col_offset = p->tokens[_mark]->col_offset;
3200
736
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3201
736
    { // 'nonlocal' ','.NAME+
3202
736
        if (p->error_indicator) {
3203
0
            p->level--;
3204
0
            return NULL;
3205
0
        }
3206
736
        D(fprintf(stderr, "%*c> nonlocal_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+"));
3207
736
        Token * _keyword;
3208
736
        asdl_expr_seq* a;
3209
736
        if (
3210
736
            (_keyword = _PyPegen_expect_token(p, 531))  // token='nonlocal'
3211
736
            &&
3212
736
            (a = (asdl_expr_seq*)_gather_14_rule(p))  // ','.NAME+
3213
736
        )
3214
733
        {
3215
733
            D(fprintf(stderr, "%*c+ nonlocal_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+"));
3216
733
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3217
733
            if (_token == NULL) {
3218
0
                p->level--;
3219
0
                return NULL;
3220
0
            }
3221
733
            int _end_lineno = _token->end_lineno;
3222
733
            UNUSED(_end_lineno); // Only used by EXTRA macro
3223
733
            int _end_col_offset = _token->end_col_offset;
3224
733
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3225
733
            _res = _PyAST_Nonlocal ( CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
3226
733
            if (_res == NULL && PyErr_Occurred()) {
3227
0
                p->error_indicator = 1;
3228
0
                p->level--;
3229
0
                return NULL;
3230
0
            }
3231
733
            goto done;
3232
733
        }
3233
3
        p->mark = _mark;
3234
3
        D(fprintf(stderr, "%*c%s nonlocal_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3235
3
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'nonlocal' ','.NAME+"));
3236
3
    }
3237
0
    _res = NULL;
3238
736
  done:
3239
736
    p->level--;
3240
736
    return _res;
3241
3
}
3242
3243
// del_stmt: 'del' del_targets &(';' | NEWLINE) | invalid_del_stmt
3244
static stmt_ty
3245
del_stmt_rule(Parser *p)
3246
1.26k
{
3247
1.26k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3248
0
        _Pypegen_stack_overflow(p);
3249
0
    }
3250
1.26k
    if (p->error_indicator) {
3251
0
        p->level--;
3252
0
        return NULL;
3253
0
    }
3254
1.26k
    stmt_ty _res = NULL;
3255
1.26k
    int _mark = p->mark;
3256
1.26k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3257
0
        p->error_indicator = 1;
3258
0
        p->level--;
3259
0
        return NULL;
3260
0
    }
3261
1.26k
    int _start_lineno = p->tokens[_mark]->lineno;
3262
1.26k
    UNUSED(_start_lineno); // Only used by EXTRA macro
3263
1.26k
    int _start_col_offset = p->tokens[_mark]->col_offset;
3264
1.26k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3265
1.26k
    { // 'del' del_targets &(';' | NEWLINE)
3266
1.26k
        if (p->error_indicator) {
3267
0
            p->level--;
3268
0
            return NULL;
3269
0
        }
3270
1.26k
        D(fprintf(stderr, "%*c> del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
3271
1.26k
        Token * _keyword;
3272
1.26k
        asdl_expr_seq* a;
3273
1.26k
        if (
3274
1.26k
            (_keyword = _PyPegen_expect_token(p, 630))  // token='del'
3275
1.26k
            &&
3276
1.26k
            (a = del_targets_rule(p))  // del_targets
3277
1.26k
            &&
3278
1.26k
            _PyPegen_lookahead(1, _tmp_15_rule, p)
3279
1.26k
        )
3280
750
        {
3281
750
            D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
3282
750
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3283
750
            if (_token == NULL) {
3284
0
                p->level--;
3285
0
                return NULL;
3286
0
            }
3287
750
            int _end_lineno = _token->end_lineno;
3288
750
            UNUSED(_end_lineno); // Only used by EXTRA macro
3289
750
            int _end_col_offset = _token->end_col_offset;
3290
750
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3291
750
            _res = _PyAST_Delete ( a , EXTRA );
3292
750
            if (_res == NULL && PyErr_Occurred()) {
3293
0
                p->error_indicator = 1;
3294
0
                p->level--;
3295
0
                return NULL;
3296
0
            }
3297
750
            goto done;
3298
750
        }
3299
518
        p->mark = _mark;
3300
518
        D(fprintf(stderr, "%*c%s del_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3301
518
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
3302
518
    }
3303
518
    if (p->call_invalid_rules) { // invalid_del_stmt
3304
395
        if (p->error_indicator) {
3305
110
            p->level--;
3306
110
            return NULL;
3307
110
        }
3308
285
        D(fprintf(stderr, "%*c> del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_del_stmt"));
3309
285
        void *invalid_del_stmt_var;
3310
285
        if (
3311
285
            (invalid_del_stmt_var = invalid_del_stmt_rule(p))  // invalid_del_stmt
3312
285
        )
3313
0
        {
3314
0
            D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_del_stmt"));
3315
0
            _res = invalid_del_stmt_var;
3316
0
            goto done;
3317
0
        }
3318
285
        p->mark = _mark;
3319
285
        D(fprintf(stderr, "%*c%s del_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3320
285
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_del_stmt"));
3321
285
    }
3322
408
    _res = NULL;
3323
1.15k
  done:
3324
1.15k
    p->level--;
3325
1.15k
    return _res;
3326
408
}
3327
3328
// yield_stmt: yield_expr
3329
static stmt_ty
3330
yield_stmt_rule(Parser *p)
3331
1.65k
{
3332
1.65k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3333
0
        _Pypegen_stack_overflow(p);
3334
0
    }
3335
1.65k
    if (p->error_indicator) {
3336
0
        p->level--;
3337
0
        return NULL;
3338
0
    }
3339
1.65k
    stmt_ty _res = NULL;
3340
1.65k
    int _mark = p->mark;
3341
1.65k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3342
0
        p->error_indicator = 1;
3343
0
        p->level--;
3344
0
        return NULL;
3345
0
    }
3346
1.65k
    int _start_lineno = p->tokens[_mark]->lineno;
3347
1.65k
    UNUSED(_start_lineno); // Only used by EXTRA macro
3348
1.65k
    int _start_col_offset = p->tokens[_mark]->col_offset;
3349
1.65k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3350
1.65k
    { // yield_expr
3351
1.65k
        if (p->error_indicator) {
3352
0
            p->level--;
3353
0
            return NULL;
3354
0
        }
3355
1.65k
        D(fprintf(stderr, "%*c> yield_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
3356
1.65k
        expr_ty y;
3357
1.65k
        if (
3358
1.65k
            (y = yield_expr_rule(p))  // yield_expr
3359
1.65k
        )
3360
1.65k
        {
3361
1.65k
            D(fprintf(stderr, "%*c+ yield_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
3362
1.65k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3363
1.65k
            if (_token == NULL) {
3364
0
                p->level--;
3365
0
                return NULL;
3366
0
            }
3367
1.65k
            int _end_lineno = _token->end_lineno;
3368
1.65k
            UNUSED(_end_lineno); // Only used by EXTRA macro
3369
1.65k
            int _end_col_offset = _token->end_col_offset;
3370
1.65k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3371
1.65k
            _res = _PyAST_Expr ( y , EXTRA );
3372
1.65k
            if (_res == NULL && PyErr_Occurred()) {
3373
0
                p->error_indicator = 1;
3374
0
                p->level--;
3375
0
                return NULL;
3376
0
            }
3377
1.65k
            goto done;
3378
1.65k
        }
3379
3
        p->mark = _mark;
3380
3
        D(fprintf(stderr, "%*c%s yield_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3381
3
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
3382
3
    }
3383
0
    _res = NULL;
3384
1.65k
  done:
3385
1.65k
    p->level--;
3386
1.65k
    return _res;
3387
3
}
3388
3389
// assert_stmt: 'assert' expression [',' expression]
3390
static stmt_ty
3391
assert_stmt_rule(Parser *p)
3392
622
{
3393
622
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3394
0
        _Pypegen_stack_overflow(p);
3395
0
    }
3396
622
    if (p->error_indicator) {
3397
0
        p->level--;
3398
0
        return NULL;
3399
0
    }
3400
622
    stmt_ty _res = NULL;
3401
622
    int _mark = p->mark;
3402
622
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3403
0
        p->error_indicator = 1;
3404
0
        p->level--;
3405
0
        return NULL;
3406
0
    }
3407
622
    int _start_lineno = p->tokens[_mark]->lineno;
3408
622
    UNUSED(_start_lineno); // Only used by EXTRA macro
3409
622
    int _start_col_offset = p->tokens[_mark]->col_offset;
3410
622
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3411
622
    { // 'assert' expression [',' expression]
3412
622
        if (p->error_indicator) {
3413
0
            p->level--;
3414
0
            return NULL;
3415
0
        }
3416
622
        D(fprintf(stderr, "%*c> assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]"));
3417
622
        Token * _keyword;
3418
622
        expr_ty a;
3419
622
        void *b;
3420
622
        if (
3421
622
            (_keyword = _PyPegen_expect_token(p, 533))  // token='assert'
3422
622
            &&
3423
622
            (a = expression_rule(p))  // expression
3424
622
            &&
3425
622
            (b = _tmp_16_rule(p), !p->error_indicator)  // [',' expression]
3426
622
        )
3427
581
        {
3428
581
            D(fprintf(stderr, "%*c+ assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]"));
3429
581
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3430
581
            if (_token == NULL) {
3431
0
                p->level--;
3432
0
                return NULL;
3433
0
            }
3434
581
            int _end_lineno = _token->end_lineno;
3435
581
            UNUSED(_end_lineno); // Only used by EXTRA macro
3436
581
            int _end_col_offset = _token->end_col_offset;
3437
581
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3438
581
            _res = _PyAST_Assert ( a , b , EXTRA );
3439
581
            if (_res == NULL && PyErr_Occurred()) {
3440
0
                p->error_indicator = 1;
3441
0
                p->level--;
3442
0
                return NULL;
3443
0
            }
3444
581
            goto done;
3445
581
        }
3446
41
        p->mark = _mark;
3447
41
        D(fprintf(stderr, "%*c%s assert_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3448
41
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'assert' expression [',' expression]"));
3449
41
    }
3450
0
    _res = NULL;
3451
622
  done:
3452
622
    p->level--;
3453
622
    return _res;
3454
41
}
3455
3456
// import_stmt: invalid_import | import_name | import_from
3457
static stmt_ty
3458
import_stmt_rule(Parser *p)
3459
4.95k
{
3460
4.95k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3461
0
        _Pypegen_stack_overflow(p);
3462
0
    }
3463
4.95k
    if (p->error_indicator) {
3464
0
        p->level--;
3465
0
        return NULL;
3466
0
    }
3467
4.95k
    stmt_ty _res = NULL;
3468
4.95k
    int _mark = p->mark;
3469
4.95k
    if (p->call_invalid_rules) { // invalid_import
3470
1.39k
        if (p->error_indicator) {
3471
0
            p->level--;
3472
0
            return NULL;
3473
0
        }
3474
1.39k
        D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_import"));
3475
1.39k
        void *invalid_import_var;
3476
1.39k
        if (
3477
1.39k
            (invalid_import_var = invalid_import_rule(p))  // invalid_import
3478
1.39k
        )
3479
0
        {
3480
0
            D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_import"));
3481
0
            _res = invalid_import_var;
3482
0
            goto done;
3483
0
        }
3484
1.39k
        p->mark = _mark;
3485
1.39k
        D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3486
1.39k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_import"));
3487
1.39k
    }
3488
4.95k
    { // import_name
3489
4.95k
        if (p->error_indicator) {
3490
5
            p->level--;
3491
5
            return NULL;
3492
5
        }
3493
4.95k
        D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_name"));
3494
4.95k
        stmt_ty import_name_var;
3495
4.95k
        if (
3496
4.95k
            (import_name_var = import_name_rule(p))  // import_name
3497
4.95k
        )
3498
2.15k
        {
3499
2.15k
            D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_name"));
3500
2.15k
            _res = import_name_var;
3501
2.15k
            goto done;
3502
2.15k
        }
3503
2.79k
        p->mark = _mark;
3504
2.79k
        D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3505
2.79k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_name"));
3506
2.79k
    }
3507
0
    { // import_from
3508
2.79k
        if (p->error_indicator) {
3509
27
            p->level--;
3510
27
            return NULL;
3511
27
        }
3512
2.76k
        D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from"));
3513
2.76k
        stmt_ty import_from_var;
3514
2.76k
        if (
3515
2.76k
            (import_from_var = import_from_rule(p))  // import_from
3516
2.76k
        )
3517
2.57k
        {
3518
2.57k
            D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from"));
3519
2.57k
            _res = import_from_var;
3520
2.57k
            goto done;
3521
2.57k
        }
3522
194
        p->mark = _mark;
3523
194
        D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ',
3524
194
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from"));
3525
194
    }
3526
0
    _res = NULL;
3527
4.92k
  done:
3528
4.92k
    p->level--;
3529
4.92k
    return _res;
3530
194
}
3531
3532
// import_name: 'import' dotted_as_names
3533
static stmt_ty
3534
import_name_rule(Parser *p)
3535
4.95k
{
3536
4.95k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3537
0
        _Pypegen_stack_overflow(p);
3538
0
    }
3539
4.95k
    if (p->error_indicator) {
3540
0
        p->level--;
3541
0
        return NULL;
3542
0
    }
3543
4.95k
    stmt_ty _res = NULL;
3544
4.95k
    int _mark = p->mark;
3545
4.95k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3546
0
        p->error_indicator = 1;
3547
0
        p->level--;
3548
0
        return NULL;
3549
0
    }
3550
4.95k
    int _start_lineno = p->tokens[_mark]->lineno;
3551
4.95k
    UNUSED(_start_lineno); // Only used by EXTRA macro
3552
4.95k
    int _start_col_offset = p->tokens[_mark]->col_offset;
3553
4.95k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3554
4.95k
    { // 'import' dotted_as_names
3555
4.95k
        if (p->error_indicator) {
3556
0
            p->level--;
3557
0
            return NULL;
3558
0
        }
3559
4.95k
        D(fprintf(stderr, "%*c> import_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' dotted_as_names"));
3560
4.95k
        Token * _keyword;
3561
4.95k
        asdl_alias_seq* a;
3562
4.95k
        if (
3563
4.95k
            (_keyword = _PyPegen_expect_token(p, 639))  // token='import'
3564
4.95k
            &&
3565
4.95k
            (a = dotted_as_names_rule(p))  // dotted_as_names
3566
4.95k
        )
3567
2.15k
        {
3568
2.15k
            D(fprintf(stderr, "%*c+ import_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import' dotted_as_names"));
3569
2.15k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3570
2.15k
            if (_token == NULL) {
3571
0
                p->level--;
3572
0
                return NULL;
3573
0
            }
3574
2.15k
            int _end_lineno = _token->end_lineno;
3575
2.15k
            UNUSED(_end_lineno); // Only used by EXTRA macro
3576
2.15k
            int _end_col_offset = _token->end_col_offset;
3577
2.15k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3578
2.15k
            _res = _PyAST_Import ( a , EXTRA );
3579
2.15k
            if (_res == NULL && PyErr_Occurred()) {
3580
0
                p->error_indicator = 1;
3581
0
                p->level--;
3582
0
                return NULL;
3583
0
            }
3584
2.15k
            goto done;
3585
2.15k
        }
3586
2.79k
        p->mark = _mark;
3587
2.79k
        D(fprintf(stderr, "%*c%s import_name[%d-%d]: %s failed!\n", p->level, ' ',
3588
2.79k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import' dotted_as_names"));
3589
2.79k
    }
3590
0
    _res = NULL;
3591
4.95k
  done:
3592
4.95k
    p->level--;
3593
4.95k
    return _res;
3594
2.79k
}
3595
3596
// import_from:
3597
//     | 'from' (('.' | '...'))* dotted_name 'import' import_from_targets
3598
//     | 'from' (('.' | '...'))+ 'import' import_from_targets
3599
static stmt_ty
3600
import_from_rule(Parser *p)
3601
2.76k
{
3602
2.76k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3603
0
        _Pypegen_stack_overflow(p);
3604
0
    }
3605
2.76k
    if (p->error_indicator) {
3606
0
        p->level--;
3607
0
        return NULL;
3608
0
    }
3609
2.76k
    stmt_ty _res = NULL;
3610
2.76k
    int _mark = p->mark;
3611
2.76k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3612
0
        p->error_indicator = 1;
3613
0
        p->level--;
3614
0
        return NULL;
3615
0
    }
3616
2.76k
    int _start_lineno = p->tokens[_mark]->lineno;
3617
2.76k
    UNUSED(_start_lineno); // Only used by EXTRA macro
3618
2.76k
    int _start_col_offset = p->tokens[_mark]->col_offset;
3619
2.76k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3620
2.76k
    { // 'from' (('.' | '...'))* dotted_name 'import' import_from_targets
3621
2.76k
        if (p->error_indicator) {
3622
0
            p->level--;
3623
0
            return NULL;
3624
0
        }
3625
2.76k
        D(fprintf(stderr, "%*c> import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
3626
2.76k
        Token * _keyword;
3627
2.76k
        Token * _keyword_1;
3628
2.76k
        asdl_seq * a;
3629
2.76k
        expr_ty b;
3630
2.76k
        asdl_alias_seq* c;
3631
2.76k
        if (
3632
2.76k
            (_keyword = _PyPegen_expect_token(p, 638))  // token='from'
3633
2.76k
            &&
3634
2.76k
            (a = _loop0_17_rule(p))  // (('.' | '...'))*
3635
2.76k
            &&
3636
2.76k
            (b = dotted_name_rule(p))  // dotted_name
3637
2.76k
            &&
3638
2.76k
            (_keyword_1 = _PyPegen_expect_token(p, 639))  // token='import'
3639
2.76k
            &&
3640
2.76k
            (c = import_from_targets_rule(p))  // import_from_targets
3641
2.76k
        )
3642
1.58k
        {
3643
1.58k
            D(fprintf(stderr, "%*c+ import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
3644
1.58k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3645
1.58k
            if (_token == NULL) {
3646
0
                p->level--;
3647
0
                return NULL;
3648
0
            }
3649
1.58k
            int _end_lineno = _token->end_lineno;
3650
1.58k
            UNUSED(_end_lineno); // Only used by EXTRA macro
3651
1.58k
            int _end_col_offset = _token->end_col_offset;
3652
1.58k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3653
1.58k
            _res = _PyPegen_checked_future_import ( p , b -> v . Name . id , c , _PyPegen_seq_count_dots ( a ) , EXTRA );
3654
1.58k
            if (_res == NULL && PyErr_Occurred()) {
3655
0
                p->error_indicator = 1;
3656
0
                p->level--;
3657
0
                return NULL;
3658
0
            }
3659
1.58k
            goto done;
3660
1.58k
        }
3661
1.18k
        p->mark = _mark;
3662
1.18k
        D(fprintf(stderr, "%*c%s import_from[%d-%d]: %s failed!\n", p->level, ' ',
3663
1.18k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
3664
1.18k
    }
3665
0
    { // 'from' (('.' | '...'))+ 'import' import_from_targets
3666
1.18k
        if (p->error_indicator) {
3667
24
            p->level--;
3668
24
            return NULL;
3669
24
        }
3670
1.15k
        D(fprintf(stderr, "%*c> import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))+ 'import' import_from_targets"));
3671
1.15k
        Token * _keyword;
3672
1.15k
        Token * _keyword_1;
3673
1.15k
        asdl_seq * a;
3674
1.15k
        asdl_alias_seq* b;
3675
1.15k
        if (
3676
1.15k
            (_keyword = _PyPegen_expect_token(p, 638))  // token='from'
3677
1.15k
            &&
3678
1.15k
            (a = _loop1_18_rule(p))  // (('.' | '...'))+
3679
1.15k
            &&
3680
1.15k
            (_keyword_1 = _PyPegen_expect_token(p, 639))  // token='import'
3681
1.15k
            &&
3682
1.15k
            (b = import_from_targets_rule(p))  // import_from_targets
3683
1.15k
        )
3684
988
        {
3685
988
            D(fprintf(stderr, "%*c+ import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))+ 'import' import_from_targets"));
3686
988
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3687
988
            if (_token == NULL) {
3688
0
                p->level--;
3689
0
                return NULL;
3690
0
            }
3691
988
            int _end_lineno = _token->end_lineno;
3692
988
            UNUSED(_end_lineno); // Only used by EXTRA macro
3693
988
            int _end_col_offset = _token->end_col_offset;
3694
988
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3695
988
            _res = _PyAST_ImportFrom ( NULL , b , _PyPegen_seq_count_dots ( a ) , EXTRA );
3696
988
            if (_res == NULL && PyErr_Occurred()) {
3697
0
                p->error_indicator = 1;
3698
0
                p->level--;
3699
0
                return NULL;
3700
0
            }
3701
988
            goto done;
3702
988
        }
3703
170
        p->mark = _mark;
3704
170
        D(fprintf(stderr, "%*c%s import_from[%d-%d]: %s failed!\n", p->level, ' ',
3705
170
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from' (('.' | '...'))+ 'import' import_from_targets"));
3706
170
    }
3707
0
    _res = NULL;
3708
2.74k
  done:
3709
2.74k
    p->level--;
3710
2.74k
    return _res;
3711
170
}
3712
3713
// import_from_targets:
3714
//     | '(' import_from_as_names ','? ')'
3715
//     | import_from_as_names !','
3716
//     | '*'
3717
//     | invalid_import_from_targets
3718
static asdl_alias_seq*
3719
import_from_targets_rule(Parser *p)
3720
2.64k
{
3721
2.64k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3722
0
        _Pypegen_stack_overflow(p);
3723
0
    }
3724
2.64k
    if (p->error_indicator) {
3725
0
        p->level--;
3726
0
        return NULL;
3727
0
    }
3728
2.64k
    asdl_alias_seq* _res = NULL;
3729
2.64k
    int _mark = p->mark;
3730
2.64k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3731
3
        p->error_indicator = 1;
3732
3
        p->level--;
3733
3
        return NULL;
3734
3
    }
3735
2.64k
    int _start_lineno = p->tokens[_mark]->lineno;
3736
2.64k
    UNUSED(_start_lineno); // Only used by EXTRA macro
3737
2.64k
    int _start_col_offset = p->tokens[_mark]->col_offset;
3738
2.64k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3739
2.64k
    { // '(' import_from_as_names ','? ')'
3740
2.64k
        if (p->error_indicator) {
3741
0
            p->level--;
3742
0
            return NULL;
3743
0
        }
3744
2.64k
        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' import_from_as_names ','? ')'"));
3745
2.64k
        Token * _literal;
3746
2.64k
        Token * _literal_1;
3747
2.64k
        void *_opt_var;
3748
2.64k
        UNUSED(_opt_var); // Silence compiler warnings
3749
2.64k
        asdl_alias_seq* a;
3750
2.64k
        if (
3751
2.64k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
3752
2.64k
            &&
3753
2.64k
            (a = import_from_as_names_rule(p))  // import_from_as_names
3754
2.64k
            &&
3755
2.64k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
3756
2.64k
            &&
3757
2.64k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
3758
2.64k
        )
3759
43
        {
3760
43
            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' import_from_as_names ','? ')'"));
3761
43
            _res = a;
3762
43
            if (_res == NULL && PyErr_Occurred()) {
3763
0
                p->error_indicator = 1;
3764
0
                p->level--;
3765
0
                return NULL;
3766
0
            }
3767
43
            goto done;
3768
43
        }
3769
2.59k
        p->mark = _mark;
3770
2.59k
        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
3771
2.59k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' import_from_as_names ','? ')'"));
3772
2.59k
    }
3773
0
    { // import_from_as_names !','
3774
2.59k
        if (p->error_indicator) {
3775
4
            p->level--;
3776
4
            return NULL;
3777
4
        }
3778
2.59k
        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_names !','"));
3779
2.59k
        asdl_alias_seq* import_from_as_names_var;
3780
2.59k
        if (
3781
2.59k
            (import_from_as_names_var = import_from_as_names_rule(p))  // import_from_as_names
3782
2.59k
            &&
3783
2.59k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12)  // token=','
3784
2.59k
        )
3785
1.97k
        {
3786
1.97k
            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_names !','"));
3787
1.97k
            _res = import_from_as_names_var;
3788
1.97k
            goto done;
3789
1.97k
        }
3790
622
        p->mark = _mark;
3791
622
        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
3792
622
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_names !','"));
3793
622
    }
3794
0
    { // '*'
3795
622
        if (p->error_indicator) {
3796
3
            p->level--;
3797
3
            return NULL;
3798
3
        }
3799
619
        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
3800
619
        Token * _literal;
3801
619
        if (
3802
619
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
3803
619
        )
3804
560
        {
3805
560
            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
3806
560
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3807
560
            if (_token == NULL) {
3808
0
                p->level--;
3809
0
                return NULL;
3810
0
            }
3811
560
            int _end_lineno = _token->end_lineno;
3812
560
            UNUSED(_end_lineno); // Only used by EXTRA macro
3813
560
            int _end_col_offset = _token->end_col_offset;
3814
560
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3815
560
            _res = ( asdl_alias_seq* ) _PyPegen_singleton_seq ( p , CHECK ( alias_ty , _PyPegen_alias_for_star ( p , EXTRA ) ) );
3816
560
            if (_res == NULL && PyErr_Occurred()) {
3817
0
                p->error_indicator = 1;
3818
0
                p->level--;
3819
0
                return NULL;
3820
0
            }
3821
560
            goto done;
3822
560
        }
3823
59
        p->mark = _mark;
3824
59
        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
3825
59
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'"));
3826
59
    }
3827
59
    if (p->call_invalid_rules) { // invalid_import_from_targets
3828
28
        if (p->error_indicator) {
3829
0
            p->level--;
3830
0
            return NULL;
3831
0
        }
3832
28
        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_import_from_targets"));
3833
28
        void *invalid_import_from_targets_var;
3834
28
        if (
3835
28
            (invalid_import_from_targets_var = invalid_import_from_targets_rule(p))  // invalid_import_from_targets
3836
28
        )
3837
0
        {
3838
0
            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_import_from_targets"));
3839
0
            _res = invalid_import_from_targets_var;
3840
0
            goto done;
3841
0
        }
3842
28
        p->mark = _mark;
3843
28
        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
3844
28
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_import_from_targets"));
3845
28
    }
3846
59
    _res = NULL;
3847
2.63k
  done:
3848
2.63k
    p->level--;
3849
2.63k
    return _res;
3850
59
}
3851
3852
// import_from_as_names: ','.import_from_as_name+
3853
static asdl_alias_seq*
3854
import_from_as_names_rule(Parser *p)
3855
2.67k
{
3856
2.67k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3857
0
        _Pypegen_stack_overflow(p);
3858
0
    }
3859
2.67k
    if (p->error_indicator) {
3860
0
        p->level--;
3861
0
        return NULL;
3862
0
    }
3863
2.67k
    asdl_alias_seq* _res = NULL;
3864
2.67k
    int _mark = p->mark;
3865
2.67k
    { // ','.import_from_as_name+
3866
2.67k
        if (p->error_indicator) {
3867
0
            p->level--;
3868
0
            return NULL;
3869
0
        }
3870
2.67k
        D(fprintf(stderr, "%*c> import_from_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+"));
3871
2.67k
        asdl_alias_seq* a;
3872
2.67k
        if (
3873
2.67k
            (a = (asdl_alias_seq*)_gather_20_rule(p))  // ','.import_from_as_name+
3874
2.67k
        )
3875
2.07k
        {
3876
2.07k
            D(fprintf(stderr, "%*c+ import_from_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+"));
3877
2.07k
            _res = a;
3878
2.07k
            if (_res == NULL && PyErr_Occurred()) {
3879
0
                p->error_indicator = 1;
3880
0
                p->level--;
3881
0
                return NULL;
3882
0
            }
3883
2.07k
            goto done;
3884
2.07k
        }
3885
601
        p->mark = _mark;
3886
601
        D(fprintf(stderr, "%*c%s import_from_as_names[%d-%d]: %s failed!\n", p->level, ' ',
3887
601
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.import_from_as_name+"));
3888
601
    }
3889
0
    _res = NULL;
3890
2.67k
  done:
3891
2.67k
    p->level--;
3892
2.67k
    return _res;
3893
601
}
3894
3895
// import_from_as_name: invalid_import_from_as_name | NAME ['as' NAME]
3896
static alias_ty
3897
import_from_as_name_rule(Parser *p)
3898
5.43k
{
3899
5.43k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3900
0
        _Pypegen_stack_overflow(p);
3901
0
    }
3902
5.43k
    if (p->error_indicator) {
3903
0
        p->level--;
3904
0
        return NULL;
3905
0
    }
3906
5.43k
    alias_ty _res = NULL;
3907
5.43k
    int _mark = p->mark;
3908
5.43k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
3909
3
        p->error_indicator = 1;
3910
3
        p->level--;
3911
3
        return NULL;
3912
3
    }
3913
5.43k
    int _start_lineno = p->tokens[_mark]->lineno;
3914
5.43k
    UNUSED(_start_lineno); // Only used by EXTRA macro
3915
5.43k
    int _start_col_offset = p->tokens[_mark]->col_offset;
3916
5.43k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
3917
5.43k
    if (p->call_invalid_rules) { // invalid_import_from_as_name
3918
1.81k
        if (p->error_indicator) {
3919
0
            p->level--;
3920
0
            return NULL;
3921
0
        }
3922
1.81k
        D(fprintf(stderr, "%*c> import_from_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_import_from_as_name"));
3923
1.81k
        void *invalid_import_from_as_name_var;
3924
1.81k
        if (
3925
1.81k
            (invalid_import_from_as_name_var = invalid_import_from_as_name_rule(p))  // invalid_import_from_as_name
3926
1.81k
        )
3927
0
        {
3928
0
            D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_import_from_as_name"));
3929
0
            _res = invalid_import_from_as_name_var;
3930
0
            goto done;
3931
0
        }
3932
1.81k
        p->mark = _mark;
3933
1.81k
        D(fprintf(stderr, "%*c%s import_from_as_name[%d-%d]: %s failed!\n", p->level, ' ',
3934
1.81k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_import_from_as_name"));
3935
1.81k
    }
3936
5.43k
    { // NAME ['as' NAME]
3937
5.43k
        if (p->error_indicator) {
3938
3
            p->level--;
3939
3
            return NULL;
3940
3
        }
3941
5.43k
        D(fprintf(stderr, "%*c> import_from_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]"));
3942
5.43k
        expr_ty a;
3943
5.43k
        void *b;
3944
5.43k
        if (
3945
5.43k
            (a = _PyPegen_name_token(p))  // NAME
3946
5.43k
            &&
3947
5.43k
            (b = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
3948
5.43k
        )
3949
4.77k
        {
3950
4.77k
            D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]"));
3951
4.77k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
3952
4.77k
            if (_token == NULL) {
3953
0
                p->level--;
3954
0
                return NULL;
3955
0
            }
3956
4.77k
            int _end_lineno = _token->end_lineno;
3957
4.77k
            UNUSED(_end_lineno); // Only used by EXTRA macro
3958
4.77k
            int _end_col_offset = _token->end_col_offset;
3959
4.77k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
3960
4.77k
            _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , EXTRA );
3961
4.77k
            if (_res == NULL && PyErr_Occurred()) {
3962
0
                p->error_indicator = 1;
3963
0
                p->level--;
3964
0
                return NULL;
3965
0
            }
3966
4.77k
            goto done;
3967
4.77k
        }
3968
659
        p->mark = _mark;
3969
659
        D(fprintf(stderr, "%*c%s import_from_as_name[%d-%d]: %s failed!\n", p->level, ' ',
3970
659
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ['as' NAME]"));
3971
659
    }
3972
0
    _res = NULL;
3973
5.43k
  done:
3974
5.43k
    p->level--;
3975
5.43k
    return _res;
3976
659
}
3977
3978
// dotted_as_names: ','.dotted_as_name+
3979
static asdl_alias_seq*
3980
dotted_as_names_rule(Parser *p)
3981
2.18k
{
3982
2.18k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
3983
0
        _Pypegen_stack_overflow(p);
3984
0
    }
3985
2.18k
    if (p->error_indicator) {
3986
0
        p->level--;
3987
0
        return NULL;
3988
0
    }
3989
2.18k
    asdl_alias_seq* _res = NULL;
3990
2.18k
    int _mark = p->mark;
3991
2.18k
    { // ','.dotted_as_name+
3992
2.18k
        if (p->error_indicator) {
3993
0
            p->level--;
3994
0
            return NULL;
3995
0
        }
3996
2.18k
        D(fprintf(stderr, "%*c> dotted_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+"));
3997
2.18k
        asdl_alias_seq* a;
3998
2.18k
        if (
3999
2.18k
            (a = (asdl_alias_seq*)_gather_23_rule(p))  // ','.dotted_as_name+
4000
2.18k
        )
4001
2.15k
        {
4002
2.15k
            D(fprintf(stderr, "%*c+ dotted_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+"));
4003
2.15k
            _res = a;
4004
2.15k
            if (_res == NULL && PyErr_Occurred()) {
4005
0
                p->error_indicator = 1;
4006
0
                p->level--;
4007
0
                return NULL;
4008
0
            }
4009
2.15k
            goto done;
4010
2.15k
        }
4011
33
        p->mark = _mark;
4012
33
        D(fprintf(stderr, "%*c%s dotted_as_names[%d-%d]: %s failed!\n", p->level, ' ',
4013
33
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.dotted_as_name+"));
4014
33
    }
4015
0
    _res = NULL;
4016
2.18k
  done:
4017
2.18k
    p->level--;
4018
2.18k
    return _res;
4019
33
}
4020
4021
// dotted_as_name: invalid_dotted_as_name | dotted_name ['as' NAME]
4022
static alias_ty
4023
dotted_as_name_rule(Parser *p)
4024
6.71k
{
4025
6.71k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4026
0
        _Pypegen_stack_overflow(p);
4027
0
    }
4028
6.71k
    if (p->error_indicator) {
4029
0
        p->level--;
4030
0
        return NULL;
4031
0
    }
4032
6.71k
    alias_ty _res = NULL;
4033
6.71k
    int _mark = p->mark;
4034
6.71k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
4035
2
        p->error_indicator = 1;
4036
2
        p->level--;
4037
2
        return NULL;
4038
2
    }
4039
6.70k
    int _start_lineno = p->tokens[_mark]->lineno;
4040
6.70k
    UNUSED(_start_lineno); // Only used by EXTRA macro
4041
6.70k
    int _start_col_offset = p->tokens[_mark]->col_offset;
4042
6.70k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
4043
6.70k
    if (p->call_invalid_rules) { // invalid_dotted_as_name
4044
2.45k
        if (p->error_indicator) {
4045
0
            p->level--;
4046
0
            return NULL;
4047
0
        }
4048
2.45k
        D(fprintf(stderr, "%*c> dotted_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_dotted_as_name"));
4049
2.45k
        void *invalid_dotted_as_name_var;
4050
2.45k
        if (
4051
2.45k
            (invalid_dotted_as_name_var = invalid_dotted_as_name_rule(p))  // invalid_dotted_as_name
4052
2.45k
        )
4053
0
        {
4054
0
            D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_dotted_as_name"));
4055
0
            _res = invalid_dotted_as_name_var;
4056
0
            goto done;
4057
0
        }
4058
2.45k
        p->mark = _mark;
4059
2.45k
        D(fprintf(stderr, "%*c%s dotted_as_name[%d-%d]: %s failed!\n", p->level, ' ',
4060
2.45k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_dotted_as_name"));
4061
2.45k
    }
4062
6.70k
    { // dotted_name ['as' NAME]
4063
6.70k
        if (p->error_indicator) {
4064
28
            p->level--;
4065
28
            return NULL;
4066
28
        }
4067
6.68k
        D(fprintf(stderr, "%*c> dotted_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]"));
4068
6.68k
        expr_ty a;
4069
6.68k
        void *b;
4070
6.68k
        if (
4071
6.68k
            (a = dotted_name_rule(p))  // dotted_name
4072
6.68k
            &&
4073
6.68k
            (b = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
4074
6.68k
        )
4075
6.63k
        {
4076
6.63k
            D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]"));
4077
6.63k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
4078
6.63k
            if (_token == NULL) {
4079
0
                p->level--;
4080
0
                return NULL;
4081
0
            }
4082
6.63k
            int _end_lineno = _token->end_lineno;
4083
6.63k
            UNUSED(_end_lineno); // Only used by EXTRA macro
4084
6.63k
            int _end_col_offset = _token->end_col_offset;
4085
6.63k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
4086
6.63k
            _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , EXTRA );
4087
6.63k
            if (_res == NULL && PyErr_Occurred()) {
4088
0
                p->error_indicator = 1;
4089
0
                p->level--;
4090
0
                return NULL;
4091
0
            }
4092
6.63k
            goto done;
4093
6.63k
        }
4094
42
        p->mark = _mark;
4095
42
        D(fprintf(stderr, "%*c%s dotted_as_name[%d-%d]: %s failed!\n", p->level, ' ',
4096
42
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name ['as' NAME]"));
4097
42
    }
4098
0
    _res = NULL;
4099
6.68k
  done:
4100
6.68k
    p->level--;
4101
6.68k
    return _res;
4102
42
}
4103
4104
// Left-recursive
4105
// dotted_name: dotted_name '.' NAME | NAME
4106
static expr_ty dotted_name_raw(Parser *);
4107
static expr_ty
4108
dotted_name_rule(Parser *p)
4109
34.1k
{
4110
34.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4111
0
        _Pypegen_stack_overflow(p);
4112
0
    }
4113
34.1k
    expr_ty _res = NULL;
4114
34.1k
    if (_PyPegen_is_memoized(p, dotted_name_type, &_res)) {
4115
24.7k
        p->level--;
4116
24.7k
        return _res;
4117
24.7k
    }
4118
9.47k
    int _mark = p->mark;
4119
9.47k
    int _resmark = p->mark;
4120
20.1k
    while (1) {
4121
20.1k
        int tmpvar_0 = _PyPegen_update_memo(p, _mark, dotted_name_type, _res);
4122
20.1k
        if (tmpvar_0) {
4123
0
            p->level--;
4124
0
            return _res;
4125
0
        }
4126
20.1k
        p->mark = _mark;
4127
20.1k
        void *_raw = dotted_name_raw(p);
4128
20.1k
        if (p->error_indicator) {
4129
13
            p->level--;
4130
13
            return NULL;
4131
13
        }
4132
20.1k
        if (_raw == NULL || p->mark <= _resmark)
4133
9.46k
            break;
4134
10.6k
        _resmark = p->mark;
4135
10.6k
        _res = _raw;
4136
10.6k
    }
4137
9.46k
    p->mark = _resmark;
4138
9.46k
    p->level--;
4139
9.46k
    return _res;
4140
9.47k
}
4141
static expr_ty
4142
dotted_name_raw(Parser *p)
4143
20.1k
{
4144
20.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4145
0
        _Pypegen_stack_overflow(p);
4146
0
    }
4147
20.1k
    if (p->error_indicator) {
4148
8
        p->level--;
4149
8
        return NULL;
4150
8
    }
4151
20.1k
    expr_ty _res = NULL;
4152
20.1k
    int _mark = p->mark;
4153
20.1k
    { // dotted_name '.' NAME
4154
20.1k
        if (p->error_indicator) {
4155
0
            p->level--;
4156
0
            return NULL;
4157
0
        }
4158
20.1k
        D(fprintf(stderr, "%*c> dotted_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name '.' NAME"));
4159
20.1k
        Token * _literal;
4160
20.1k
        expr_ty a;
4161
20.1k
        expr_ty b;
4162
20.1k
        if (
4163
20.1k
            (a = dotted_name_rule(p))  // dotted_name
4164
20.1k
            &&
4165
20.1k
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
4166
20.1k
            &&
4167
20.1k
            (b = _PyPegen_name_token(p))  // NAME
4168
20.1k
        )
4169
2.30k
        {
4170
2.30k
            D(fprintf(stderr, "%*c+ dotted_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name '.' NAME"));
4171
2.30k
            _res = _PyPegen_join_names_with_dot ( p , a , b );
4172
2.30k
            if (_res == NULL && PyErr_Occurred()) {
4173
0
                p->error_indicator = 1;
4174
0
                p->level--;
4175
0
                return NULL;
4176
0
            }
4177
2.30k
            goto done;
4178
2.30k
        }
4179
17.8k
        p->mark = _mark;
4180
17.8k
        D(fprintf(stderr, "%*c%s dotted_name[%d-%d]: %s failed!\n", p->level, ' ',
4181
17.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name '.' NAME"));
4182
17.8k
    }
4183
0
    { // NAME
4184
17.8k
        if (p->error_indicator) {
4185
5
            p->level--;
4186
5
            return NULL;
4187
5
        }
4188
17.8k
        D(fprintf(stderr, "%*c> dotted_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
4189
17.8k
        expr_ty name_var;
4190
17.8k
        if (
4191
17.8k
            (name_var = _PyPegen_name_token(p))  // NAME
4192
17.8k
        )
4193
16.6k
        {
4194
16.6k
            D(fprintf(stderr, "%*c+ dotted_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
4195
16.6k
            _res = name_var;
4196
16.6k
            goto done;
4197
16.6k
        }
4198
1.12k
        p->mark = _mark;
4199
1.12k
        D(fprintf(stderr, "%*c%s dotted_name[%d-%d]: %s failed!\n", p->level, ' ',
4200
1.12k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
4201
1.12k
    }
4202
0
    _res = NULL;
4203
20.1k
  done:
4204
20.1k
    p->level--;
4205
20.1k
    return _res;
4206
1.12k
}
4207
4208
// block: NEWLINE INDENT statements DEDENT | simple_stmts | invalid_block
4209
static asdl_stmt_seq*
4210
block_rule(Parser *p)
4211
71.4k
{
4212
71.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4213
0
        _Pypegen_stack_overflow(p);
4214
0
    }
4215
71.4k
    if (p->error_indicator) {
4216
0
        p->level--;
4217
0
        return NULL;
4218
0
    }
4219
71.4k
    asdl_stmt_seq* _res = NULL;
4220
71.4k
    if (_PyPegen_is_memoized(p, block_type, &_res)) {
4221
22.1k
        p->level--;
4222
22.1k
        return _res;
4223
22.1k
    }
4224
49.3k
    int _mark = p->mark;
4225
49.3k
    { // NEWLINE INDENT statements DEDENT
4226
49.3k
        if (p->error_indicator) {
4227
0
            p->level--;
4228
0
            return NULL;
4229
0
        }
4230
49.3k
        D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
4231
49.3k
        asdl_stmt_seq* a;
4232
49.3k
        Token * dedent_var;
4233
49.3k
        Token * indent_var;
4234
49.3k
        Token * newline_var;
4235
49.3k
        if (
4236
49.3k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
4237
49.3k
            &&
4238
49.3k
            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
4239
49.3k
            &&
4240
49.3k
            (a = statements_rule(p))  // statements
4241
49.3k
            &&
4242
49.3k
            (dedent_var = _PyPegen_expect_token(p, DEDENT))  // token='DEDENT'
4243
49.3k
        )
4244
18.0k
        {
4245
18.0k
            D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
4246
18.0k
            _res = a;
4247
18.0k
            if (_res == NULL && PyErr_Occurred()) {
4248
0
                p->error_indicator = 1;
4249
0
                p->level--;
4250
0
                return NULL;
4251
0
            }
4252
18.0k
            goto done;
4253
18.0k
        }
4254
31.3k
        p->mark = _mark;
4255
31.3k
        D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
4256
31.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
4257
31.3k
    }
4258
0
    { // simple_stmts
4259
31.3k
        if (p->error_indicator) {
4260
147
            p->level--;
4261
147
            return NULL;
4262
147
        }
4263
31.2k
        D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
4264
31.2k
        asdl_stmt_seq* simple_stmts_var;
4265
31.2k
        if (
4266
31.2k
            (simple_stmts_var = simple_stmts_rule(p))  // simple_stmts
4267
31.2k
        )
4268
28.6k
        {
4269
28.6k
            D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
4270
28.6k
            _res = simple_stmts_var;
4271
28.6k
            goto done;
4272
28.6k
        }
4273
2.52k
        p->mark = _mark;
4274
2.52k
        D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
4275
2.52k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts"));
4276
2.52k
    }
4277
2.52k
    if (p->call_invalid_rules) { // invalid_block
4278
2.02k
        if (p->error_indicator) {
4279
22
            p->level--;
4280
22
            return NULL;
4281
22
        }
4282
2.00k
        D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_block"));
4283
2.00k
        void *invalid_block_var;
4284
2.00k
        if (
4285
2.00k
            (invalid_block_var = invalid_block_rule(p))  // invalid_block
4286
2.00k
        )
4287
0
        {
4288
0
            D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_block"));
4289
0
            _res = invalid_block_var;
4290
0
            goto done;
4291
0
        }
4292
2.00k
        p->mark = _mark;
4293
2.00k
        D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
4294
2.00k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_block"));
4295
2.00k
    }
4296
2.50k
    _res = NULL;
4297
49.2k
  done:
4298
49.2k
    _PyPegen_insert_memo(p, _mark, block_type, _res);
4299
49.2k
    p->level--;
4300
49.2k
    return _res;
4301
2.50k
}
4302
4303
// decorators: (('@' named_expression NEWLINE))+
4304
static asdl_expr_seq*
4305
decorators_rule(Parser *p)
4306
16.5k
{
4307
16.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4308
0
        _Pypegen_stack_overflow(p);
4309
0
    }
4310
16.5k
    if (p->error_indicator) {
4311
0
        p->level--;
4312
0
        return NULL;
4313
0
    }
4314
16.5k
    asdl_expr_seq* _res = NULL;
4315
16.5k
    int _mark = p->mark;
4316
16.5k
    { // (('@' named_expression NEWLINE))+
4317
16.5k
        if (p->error_indicator) {
4318
0
            p->level--;
4319
0
            return NULL;
4320
0
        }
4321
16.5k
        D(fprintf(stderr, "%*c> decorators[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+"));
4322
16.5k
        asdl_expr_seq* a;
4323
16.5k
        if (
4324
16.5k
            (a = (asdl_expr_seq*)_loop1_24_rule(p))  // (('@' named_expression NEWLINE))+
4325
16.5k
        )
4326
2.43k
        {
4327
2.43k
            D(fprintf(stderr, "%*c+ decorators[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+"));
4328
2.43k
            _res = a;
4329
2.43k
            if (_res == NULL && PyErr_Occurred()) {
4330
0
                p->error_indicator = 1;
4331
0
                p->level--;
4332
0
                return NULL;
4333
0
            }
4334
2.43k
            goto done;
4335
2.43k
        }
4336
14.1k
        p->mark = _mark;
4337
14.1k
        D(fprintf(stderr, "%*c%s decorators[%d-%d]: %s failed!\n", p->level, ' ',
4338
14.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(('@' named_expression NEWLINE))+"));
4339
14.1k
    }
4340
0
    _res = NULL;
4341
16.5k
  done:
4342
16.5k
    p->level--;
4343
16.5k
    return _res;
4344
14.1k
}
4345
4346
// class_def: decorators class_def_raw | class_def_raw
4347
static stmt_ty
4348
class_def_rule(Parser *p)
4349
3.87k
{
4350
3.87k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4351
0
        _Pypegen_stack_overflow(p);
4352
0
    }
4353
3.87k
    if (p->error_indicator) {
4354
0
        p->level--;
4355
0
        return NULL;
4356
0
    }
4357
3.87k
    stmt_ty _res = NULL;
4358
3.87k
    int _mark = p->mark;
4359
3.87k
    { // decorators class_def_raw
4360
3.87k
        if (p->error_indicator) {
4361
0
            p->level--;
4362
0
            return NULL;
4363
0
        }
4364
3.87k
        D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw"));
4365
3.87k
        asdl_expr_seq* a;
4366
3.87k
        stmt_ty b;
4367
3.87k
        if (
4368
3.87k
            (a = decorators_rule(p))  // decorators
4369
3.87k
            &&
4370
3.87k
            (b = class_def_raw_rule(p))  // class_def_raw
4371
3.87k
        )
4372
507
        {
4373
507
            D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw"));
4374
507
            _res = _PyPegen_class_def_decorators ( p , a , b );
4375
507
            if (_res == NULL && PyErr_Occurred()) {
4376
0
                p->error_indicator = 1;
4377
0
                p->level--;
4378
0
                return NULL;
4379
0
            }
4380
507
            goto done;
4381
507
        }
4382
3.37k
        p->mark = _mark;
4383
3.37k
        D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ',
4384
3.37k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators class_def_raw"));
4385
3.37k
    }
4386
0
    { // class_def_raw
4387
3.37k
        if (p->error_indicator) {
4388
3
            p->level--;
4389
3
            return NULL;
4390
3
        }
4391
3.36k
        D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_def_raw"));
4392
3.36k
        stmt_ty class_def_raw_var;
4393
3.36k
        if (
4394
3.36k
            (class_def_raw_var = class_def_raw_rule(p))  // class_def_raw
4395
3.36k
        )
4396
2.95k
        {
4397
2.95k
            D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "class_def_raw"));
4398
2.95k
            _res = class_def_raw_var;
4399
2.95k
            goto done;
4400
2.95k
        }
4401
410
        p->mark = _mark;
4402
410
        D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ',
4403
410
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "class_def_raw"));
4404
410
    }
4405
0
    _res = NULL;
4406
3.87k
  done:
4407
3.87k
    p->level--;
4408
3.87k
    return _res;
4409
410
}
4410
4411
// class_def_raw:
4412
//     | invalid_class_def_raw
4413
//     | 'class' NAME type_params? ['(' arguments? ')'] ':' block
4414
static stmt_ty
4415
class_def_raw_rule(Parser *p)
4416
4.05k
{
4417
4.05k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4418
0
        _Pypegen_stack_overflow(p);
4419
0
    }
4420
4.05k
    if (p->error_indicator) {
4421
0
        p->level--;
4422
0
        return NULL;
4423
0
    }
4424
4.05k
    stmt_ty _res = NULL;
4425
4.05k
    int _mark = p->mark;
4426
4.05k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
4427
0
        p->error_indicator = 1;
4428
0
        p->level--;
4429
0
        return NULL;
4430
0
    }
4431
4.05k
    int _start_lineno = p->tokens[_mark]->lineno;
4432
4.05k
    UNUSED(_start_lineno); // Only used by EXTRA macro
4433
4.05k
    int _start_col_offset = p->tokens[_mark]->col_offset;
4434
4.05k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
4435
4.05k
    if (p->call_invalid_rules) { // invalid_class_def_raw
4436
1.08k
        if (p->error_indicator) {
4437
0
            p->level--;
4438
0
            return NULL;
4439
0
        }
4440
1.08k
        D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw"));
4441
1.08k
        void *invalid_class_def_raw_var;
4442
1.08k
        if (
4443
1.08k
            (invalid_class_def_raw_var = invalid_class_def_raw_rule(p))  // invalid_class_def_raw
4444
1.08k
        )
4445
0
        {
4446
0
            D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw"));
4447
0
            _res = invalid_class_def_raw_var;
4448
0
            goto done;
4449
0
        }
4450
1.08k
        p->mark = _mark;
4451
1.08k
        D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
4452
1.08k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_class_def_raw"));
4453
1.08k
    }
4454
4.05k
    { // 'class' NAME type_params? ['(' arguments? ')'] ':' block
4455
4.05k
        if (p->error_indicator) {
4456
19
            p->level--;
4457
19
            return NULL;
4458
19
        }
4459
4.03k
        D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' block"));
4460
4.03k
        Token * _keyword;
4461
4.03k
        Token * _literal;
4462
4.03k
        expr_ty a;
4463
4.03k
        void *b;
4464
4.03k
        asdl_stmt_seq* c;
4465
4.03k
        void *t;
4466
4.03k
        if (
4467
4.03k
            (_keyword = _PyPegen_expect_token(p, 706))  // token='class'
4468
4.03k
            &&
4469
4.03k
            (a = _PyPegen_name_token(p))  // NAME
4470
4.03k
            &&
4471
4.03k
            (t = type_params_rule(p), !p->error_indicator)  // type_params?
4472
4.03k
            &&
4473
4.03k
            (b = _tmp_25_rule(p), !p->error_indicator)  // ['(' arguments? ')']
4474
4.03k
            &&
4475
4.03k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
4476
4.03k
            &&
4477
4.03k
            (c = block_rule(p))  // block
4478
4.03k
        )
4479
3.46k
        {
4480
3.46k
            D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' block"));
4481
3.46k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
4482
3.46k
            if (_token == NULL) {
4483
0
                p->level--;
4484
0
                return NULL;
4485
0
            }
4486
3.46k
            int _end_lineno = _token->end_lineno;
4487
3.46k
            UNUSED(_end_lineno); // Only used by EXTRA macro
4488
3.46k
            int _end_col_offset = _token->end_col_offset;
4489
3.46k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
4490
3.46k
            _res = _PyAST_ClassDef ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , c , NULL , t , EXTRA );
4491
3.46k
            if (_res == NULL && PyErr_Occurred()) {
4492
0
                p->error_indicator = 1;
4493
0
                p->level--;
4494
0
                return NULL;
4495
0
            }
4496
3.46k
            goto done;
4497
3.46k
        }
4498
569
        p->mark = _mark;
4499
569
        D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
4500
569
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' block"));
4501
569
    }
4502
0
    _res = NULL;
4503
4.03k
  done:
4504
4.03k
    p->level--;
4505
4.03k
    return _res;
4506
569
}
4507
4508
// function_def: decorators function_def_raw | function_def_raw
4509
static stmt_ty
4510
function_def_rule(Parser *p)
4511
12.7k
{
4512
12.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4513
0
        _Pypegen_stack_overflow(p);
4514
0
    }
4515
12.7k
    if (p->error_indicator) {
4516
0
        p->level--;
4517
0
        return NULL;
4518
0
    }
4519
12.7k
    stmt_ty _res = NULL;
4520
12.7k
    int _mark = p->mark;
4521
12.7k
    { // decorators function_def_raw
4522
12.7k
        if (p->error_indicator) {
4523
0
            p->level--;
4524
0
            return NULL;
4525
0
        }
4526
12.7k
        D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw"));
4527
12.7k
        asdl_expr_seq* d;
4528
12.7k
        stmt_ty f;
4529
12.7k
        if (
4530
12.7k
            (d = decorators_rule(p))  // decorators
4531
12.7k
            &&
4532
12.7k
            (f = function_def_raw_rule(p))  // function_def_raw
4533
12.7k
        )
4534
1.05k
        {
4535
1.05k
            D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw"));
4536
1.05k
            _res = _PyPegen_function_def_decorators ( p , d , f );
4537
1.05k
            if (_res == NULL && PyErr_Occurred()) {
4538
0
                p->error_indicator = 1;
4539
0
                p->level--;
4540
0
                return NULL;
4541
0
            }
4542
1.05k
            goto done;
4543
1.05k
        }
4544
11.6k
        p->mark = _mark;
4545
11.6k
        D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ',
4546
11.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators function_def_raw"));
4547
11.6k
    }
4548
0
    { // function_def_raw
4549
11.6k
        if (p->error_indicator) {
4550
41
            p->level--;
4551
41
            return NULL;
4552
41
        }
4553
11.6k
        D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "function_def_raw"));
4554
11.6k
        stmt_ty function_def_raw_var;
4555
11.6k
        if (
4556
11.6k
            (function_def_raw_var = function_def_raw_rule(p))  // function_def_raw
4557
11.6k
        )
4558
8.72k
        {
4559
8.72k
            D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "function_def_raw"));
4560
8.72k
            _res = function_def_raw_var;
4561
8.72k
            goto done;
4562
8.72k
        }
4563
2.89k
        p->mark = _mark;
4564
2.89k
        D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ',
4565
2.89k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "function_def_raw"));
4566
2.89k
    }
4567
0
    _res = NULL;
4568
12.6k
  done:
4569
12.6k
    p->level--;
4570
12.6k
    return _res;
4571
2.89k
}
4572
4573
// function_def_raw:
4574
//     | invalid_def_raw
4575
//     | 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block
4576
//     | 'async' 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block
4577
static stmt_ty
4578
function_def_raw_rule(Parser *p)
4579
13.3k
{
4580
13.3k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4581
0
        _Pypegen_stack_overflow(p);
4582
0
    }
4583
13.3k
    if (p->error_indicator) {
4584
0
        p->level--;
4585
0
        return NULL;
4586
0
    }
4587
13.3k
    stmt_ty _res = NULL;
4588
13.3k
    int _mark = p->mark;
4589
13.3k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
4590
0
        p->error_indicator = 1;
4591
0
        p->level--;
4592
0
        return NULL;
4593
0
    }
4594
13.3k
    int _start_lineno = p->tokens[_mark]->lineno;
4595
13.3k
    UNUSED(_start_lineno); // Only used by EXTRA macro
4596
13.3k
    int _start_col_offset = p->tokens[_mark]->col_offset;
4597
13.3k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
4598
13.3k
    if (p->call_invalid_rules) { // invalid_def_raw
4599
3.29k
        if (p->error_indicator) {
4600
0
            p->level--;
4601
0
            return NULL;
4602
0
        }
4603
3.29k
        D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_def_raw"));
4604
3.29k
        void *invalid_def_raw_var;
4605
3.29k
        if (
4606
3.29k
            (invalid_def_raw_var = invalid_def_raw_rule(p))  // invalid_def_raw
4607
3.29k
        )
4608
1.78k
        {
4609
1.78k
            D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_def_raw"));
4610
1.78k
            _res = invalid_def_raw_var;
4611
1.78k
            goto done;
4612
1.78k
        }
4613
1.50k
        p->mark = _mark;
4614
1.50k
        D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
4615
1.50k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_def_raw"));
4616
1.50k
    }
4617
11.5k
    { // 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block
4618
11.5k
        if (p->error_indicator) {
4619
200
            p->level--;
4620
200
            return NULL;
4621
200
        }
4622
11.3k
        D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
4623
11.3k
        Token * _keyword;
4624
11.3k
        Token * _literal;
4625
11.3k
        Token * _literal_1;
4626
11.3k
        Token * _literal_2;
4627
11.3k
        void *a;
4628
11.3k
        asdl_stmt_seq* b;
4629
11.3k
        expr_ty n;
4630
11.3k
        void *params;
4631
11.3k
        void *t;
4632
11.3k
        void *tc;
4633
11.3k
        if (
4634
11.3k
            (_keyword = _PyPegen_expect_token(p, 704))  // token='def'
4635
11.3k
            &&
4636
11.3k
            (n = _PyPegen_name_token(p))  // NAME
4637
11.3k
            &&
4638
11.3k
            (t = type_params_rule(p), !p->error_indicator)  // type_params?
4639
11.3k
            &&
4640
11.3k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
4641
11.3k
            &&
4642
11.3k
            (params = params_rule(p), !p->error_indicator)  // params?
4643
11.3k
            &&
4644
11.3k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
4645
11.3k
            &&
4646
11.3k
            (a = _tmp_26_rule(p), !p->error_indicator)  // ['->' expression]
4647
11.3k
            &&
4648
11.3k
            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
4649
11.3k
            &&
4650
11.3k
            (tc = func_type_comment_rule(p), !p->error_indicator)  // func_type_comment?
4651
11.3k
            &&
4652
11.3k
            (b = block_rule(p))  // block
4653
11.3k
        )
4654
7.26k
        {
4655
7.26k
            D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
4656
7.26k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
4657
7.26k
            if (_token == NULL) {
4658
0
                p->level--;
4659
0
                return NULL;
4660
0
            }
4661
7.26k
            int _end_lineno = _token->end_lineno;
4662
7.26k
            UNUSED(_end_lineno); // Only used by EXTRA macro
4663
7.26k
            int _end_col_offset = _token->end_col_offset;
4664
7.26k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
4665
7.26k
            _res = _PyAST_FunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , t , EXTRA );
4666
7.26k
            if (_res == NULL && PyErr_Occurred()) {
4667
0
                p->error_indicator = 1;
4668
0
                p->level--;
4669
0
                return NULL;
4670
0
            }
4671
7.26k
            goto done;
4672
7.26k
        }
4673
4.12k
        p->mark = _mark;
4674
4.12k
        D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
4675
4.12k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
4676
4.12k
    }
4677
0
    { // 'async' 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block
4678
4.12k
        if (p->error_indicator) {
4679
73
            p->level--;
4680
73
            return NULL;
4681
73
        }
4682
4.05k
        D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
4683
4.05k
        Token * _keyword;
4684
4.05k
        Token * _keyword_1;
4685
4.05k
        Token * _literal;
4686
4.05k
        Token * _literal_1;
4687
4.05k
        Token * _literal_2;
4688
4.05k
        void *a;
4689
4.05k
        asdl_stmt_seq* b;
4690
4.05k
        expr_ty n;
4691
4.05k
        void *params;
4692
4.05k
        void *t;
4693
4.05k
        void *tc;
4694
4.05k
        if (
4695
4.05k
            (_keyword = _PyPegen_expect_token(p, 703))  // token='async'
4696
4.05k
            &&
4697
4.05k
            (_keyword_1 = _PyPegen_expect_token(p, 704))  // token='def'
4698
4.05k
            &&
4699
4.05k
            (n = _PyPegen_name_token(p))  // NAME
4700
4.05k
            &&
4701
4.05k
            (t = type_params_rule(p), !p->error_indicator)  // type_params?
4702
4.05k
            &&
4703
4.05k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
4704
4.05k
            &&
4705
4.05k
            (params = params_rule(p), !p->error_indicator)  // params?
4706
4.05k
            &&
4707
4.05k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
4708
4.05k
            &&
4709
4.05k
            (a = _tmp_26_rule(p), !p->error_indicator)  // ['->' expression]
4710
4.05k
            &&
4711
4.05k
            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
4712
4.05k
            &&
4713
4.05k
            (tc = func_type_comment_rule(p), !p->error_indicator)  // func_type_comment?
4714
4.05k
            &&
4715
4.05k
            (b = block_rule(p))  // block
4716
4.05k
        )
4717
731
        {
4718
731
            D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
4719
731
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
4720
731
            if (_token == NULL) {
4721
0
                p->level--;
4722
0
                return NULL;
4723
0
            }
4724
731
            int _end_lineno = _token->end_lineno;
4725
731
            UNUSED(_end_lineno); // Only used by EXTRA macro
4726
731
            int _end_col_offset = _token->end_col_offset;
4727
731
            UNUSED(_end_col_offset); // Only used by EXTRA macro
4728
731
            _res = CHECK_VERSION ( stmt_ty , 5 , "Async functions are" , _PyAST_AsyncFunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , t , EXTRA ) );
4729
731
            if (_res == NULL && PyErr_Occurred()) {
4730
0
                p->error_indicator = 1;
4731
0
                p->level--;
4732
0
                return NULL;
4733
0
            }
4734
731
            goto done;
4735
731
        }
4736
3.31k
        p->mark = _mark;
4737
3.31k
        D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
4738
3.31k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
4739
3.31k
    }
4740
0
    _res = NULL;
4741
13.0k
  done:
4742
13.0k
    p->level--;
4743
13.0k
    return _res;
4744
3.31k
}
4745
4746
// params: invalid_parameters | parameters
4747
static arguments_ty
4748
params_rule(Parser *p)
4749
12.6k
{
4750
12.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4751
0
        _Pypegen_stack_overflow(p);
4752
0
    }
4753
12.6k
    if (p->error_indicator) {
4754
0
        p->level--;
4755
0
        return NULL;
4756
0
    }
4757
12.6k
    arguments_ty _res = NULL;
4758
12.6k
    int _mark = p->mark;
4759
12.6k
    if (p->call_invalid_rules) { // invalid_parameters
4760
4.32k
        if (p->error_indicator) {
4761
0
            p->level--;
4762
0
            return NULL;
4763
0
        }
4764
4.32k
        D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_parameters"));
4765
4.32k
        void *invalid_parameters_var;
4766
4.32k
        if (
4767
4.32k
            (invalid_parameters_var = invalid_parameters_rule(p))  // invalid_parameters
4768
4.32k
        )
4769
0
        {
4770
0
            D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_parameters"));
4771
0
            _res = invalid_parameters_var;
4772
0
            goto done;
4773
0
        }
4774
4.32k
        p->mark = _mark;
4775
4.32k
        D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ',
4776
4.32k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_parameters"));
4777
4.32k
    }
4778
12.6k
    { // parameters
4779
12.6k
        if (p->error_indicator) {
4780
25
            p->level--;
4781
25
            return NULL;
4782
25
        }
4783
12.6k
        D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "parameters"));
4784
12.6k
        arguments_ty parameters_var;
4785
12.6k
        if (
4786
12.6k
            (parameters_var = parameters_rule(p))  // parameters
4787
12.6k
        )
4788
10.8k
        {
4789
10.8k
            D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "parameters"));
4790
10.8k
            _res = parameters_var;
4791
10.8k
            goto done;
4792
10.8k
        }
4793
1.77k
        p->mark = _mark;
4794
1.77k
        D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ',
4795
1.77k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "parameters"));
4796
1.77k
    }
4797
0
    _res = NULL;
4798
12.6k
  done:
4799
12.6k
    p->level--;
4800
12.6k
    return _res;
4801
1.77k
}
4802
4803
// parameters:
4804
//     | slash_no_default param_no_default* param_with_default* star_etc?
4805
//     | slash_with_default param_with_default* star_etc?
4806
//     | param_no_default+ param_with_default* star_etc?
4807
//     | param_with_default+ star_etc?
4808
//     | star_etc
4809
static arguments_ty
4810
parameters_rule(Parser *p)
4811
12.6k
{
4812
12.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4813
0
        _Pypegen_stack_overflow(p);
4814
0
    }
4815
12.6k
    if (p->error_indicator) {
4816
0
        p->level--;
4817
0
        return NULL;
4818
0
    }
4819
12.6k
    arguments_ty _res = NULL;
4820
12.6k
    int _mark = p->mark;
4821
12.6k
    { // slash_no_default param_no_default* param_with_default* star_etc?
4822
12.6k
        if (p->error_indicator) {
4823
0
            p->level--;
4824
0
            return NULL;
4825
0
        }
4826
12.6k
        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
4827
12.6k
        asdl_arg_seq* a;
4828
12.6k
        asdl_arg_seq* b;
4829
12.6k
        asdl_seq * c;
4830
12.6k
        void *d;
4831
12.6k
        if (
4832
12.6k
            (a = slash_no_default_rule(p))  // slash_no_default
4833
12.6k
            &&
4834
12.6k
            (b = (asdl_arg_seq*)_loop0_27_rule(p))  // param_no_default*
4835
12.6k
            &&
4836
12.6k
            (c = _loop0_28_rule(p))  // param_with_default*
4837
12.6k
            &&
4838
12.6k
            (d = star_etc_rule(p), !p->error_indicator)  // star_etc?
4839
12.6k
        )
4840
723
        {
4841
723
            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
4842
723
            _res = CHECK_VERSION ( arguments_ty , 8 , "Positional-only parameters are" , _PyPegen_make_arguments ( p , a , NULL , b , c , d ) );
4843
723
            if (_res == NULL && PyErr_Occurred()) {
4844
0
                p->error_indicator = 1;
4845
0
                p->level--;
4846
0
                return NULL;
4847
0
            }
4848
723
            goto done;
4849
723
        }
4850
11.9k
        p->mark = _mark;
4851
11.9k
        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
4852
11.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
4853
11.9k
    }
4854
0
    { // slash_with_default param_with_default* star_etc?
4855
11.9k
        if (p->error_indicator) {
4856
15
            p->level--;
4857
15
            return NULL;
4858
15
        }
4859
11.9k
        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
4860
11.9k
        SlashWithDefault* a;
4861
11.9k
        asdl_seq * b;
4862
11.9k
        void *c;
4863
11.9k
        if (
4864
11.9k
            (a = slash_with_default_rule(p))  // slash_with_default
4865
11.9k
            &&
4866
11.9k
            (b = _loop0_28_rule(p))  // param_with_default*
4867
11.9k
            &&
4868
11.9k
            (c = star_etc_rule(p), !p->error_indicator)  // star_etc?
4869
11.9k
        )
4870
944
        {
4871
944
            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
4872
944
            _res = CHECK_VERSION ( arguments_ty , 8 , "Positional-only parameters are" , _PyPegen_make_arguments ( p , NULL , a , NULL , b , c ) );
4873
944
            if (_res == NULL && PyErr_Occurred()) {
4874
0
                p->error_indicator = 1;
4875
0
                p->level--;
4876
0
                return NULL;
4877
0
            }
4878
944
            goto done;
4879
944
        }
4880
10.9k
        p->mark = _mark;
4881
10.9k
        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
4882
10.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
4883
10.9k
    }
4884
0
    { // param_no_default+ param_with_default* star_etc?
4885
10.9k
        if (p->error_indicator) {
4886
7
            p->level--;
4887
7
            return NULL;
4888
7
        }
4889
10.9k
        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
4890
10.9k
        asdl_arg_seq* a;
4891
10.9k
        asdl_seq * b;
4892
10.9k
        void *c;
4893
10.9k
        if (
4894
10.9k
            (a = (asdl_arg_seq*)_loop1_29_rule(p))  // param_no_default+
4895
10.9k
            &&
4896
10.9k
            (b = _loop0_28_rule(p))  // param_with_default*
4897
10.9k
            &&
4898
10.9k
            (c = star_etc_rule(p), !p->error_indicator)  // star_etc?
4899
10.9k
        )
4900
5.76k
        {
4901
5.76k
            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
4902
5.76k
            _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c );
4903
5.76k
            if (_res == NULL && PyErr_Occurred()) {
4904
0
                p->error_indicator = 1;
4905
0
                p->level--;
4906
0
                return NULL;
4907
0
            }
4908
5.76k
            goto done;
4909
5.76k
        }
4910
5.21k
        p->mark = _mark;
4911
5.21k
        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
4912
5.21k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
4913
5.21k
    }
4914
0
    { // param_with_default+ star_etc?
4915
5.21k
        if (p->error_indicator) {
4916
3
            p->level--;
4917
3
            return NULL;
4918
3
        }
4919
5.21k
        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?"));
4920
5.21k
        asdl_seq * a;
4921
5.21k
        void *b;
4922
5.21k
        if (
4923
5.21k
            (a = _loop1_30_rule(p))  // param_with_default+
4924
5.21k
            &&
4925
5.21k
            (b = star_etc_rule(p), !p->error_indicator)  // star_etc?
4926
5.21k
        )
4927
975
        {
4928
975
            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?"));
4929
975
            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b );
4930
975
            if (_res == NULL && PyErr_Occurred()) {
4931
0
                p->error_indicator = 1;
4932
0
                p->level--;
4933
0
                return NULL;
4934
0
            }
4935
975
            goto done;
4936
975
        }
4937
4.23k
        p->mark = _mark;
4938
4.23k
        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
4939
4.23k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default+ star_etc?"));
4940
4.23k
    }
4941
0
    { // star_etc
4942
4.23k
        if (p->error_indicator) {
4943
1
            p->level--;
4944
1
            return NULL;
4945
1
        }
4946
4.23k
        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_etc"));
4947
4.23k
        StarEtc* a;
4948
4.23k
        if (
4949
4.23k
            (a = star_etc_rule(p))  // star_etc
4950
4.23k
        )
4951
2.48k
        {
4952
2.48k
            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_etc"));
4953
2.48k
            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a );
4954
2.48k
            if (_res == NULL && PyErr_Occurred()) {
4955
0
                p->error_indicator = 1;
4956
0
                p->level--;
4957
0
                return NULL;
4958
0
            }
4959
2.48k
            goto done;
4960
2.48k
        }
4961
1.74k
        p->mark = _mark;
4962
1.74k
        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
4963
1.74k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_etc"));
4964
1.74k
    }
4965
0
    _res = NULL;
4966
12.6k
  done:
4967
12.6k
    p->level--;
4968
12.6k
    return _res;
4969
1.74k
}
4970
4971
// slash_no_default: param_no_default+ '/' ',' | param_no_default+ '/' &')'
4972
static asdl_arg_seq*
4973
slash_no_default_rule(Parser *p)
4974
25.6k
{
4975
25.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
4976
0
        _Pypegen_stack_overflow(p);
4977
0
    }
4978
25.6k
    if (p->error_indicator) {
4979
0
        p->level--;
4980
0
        return NULL;
4981
0
    }
4982
25.6k
    asdl_arg_seq* _res = NULL;
4983
25.6k
    int _mark = p->mark;
4984
25.6k
    { // param_no_default+ '/' ','
4985
25.6k
        if (p->error_indicator) {
4986
0
            p->level--;
4987
0
            return NULL;
4988
0
        }
4989
25.6k
        D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','"));
4990
25.6k
        Token * _literal;
4991
25.6k
        Token * _literal_1;
4992
25.6k
        asdl_arg_seq* a;
4993
25.6k
        if (
4994
25.6k
            (a = (asdl_arg_seq*)_loop1_29_rule(p))  // param_no_default+
4995
25.6k
            &&
4996
25.6k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
4997
25.6k
            &&
4998
25.6k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
4999
25.6k
        )
5000
294
        {
5001
294
            D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','"));
5002
294
            _res = a;
5003
294
            if (_res == NULL && PyErr_Occurred()) {
5004
0
                p->error_indicator = 1;
5005
0
                p->level--;
5006
0
                return NULL;
5007
0
            }
5008
294
            goto done;
5009
294
        }
5010
25.3k
        p->mark = _mark;
5011
25.3k
        D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
5012
25.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' ','"));
5013
25.3k
    }
5014
0
    { // param_no_default+ '/' &')'
5015
25.3k
        if (p->error_indicator) {
5016
12
            p->level--;
5017
12
            return NULL;
5018
12
        }
5019
25.3k
        D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'"));
5020
25.3k
        Token * _literal;
5021
25.3k
        asdl_arg_seq* a;
5022
25.3k
        if (
5023
25.3k
            (a = (asdl_arg_seq*)_loop1_29_rule(p))  // param_no_default+
5024
25.3k
            &&
5025
25.3k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
5026
25.3k
            &&
5027
25.3k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
5028
25.3k
        )
5029
1.67k
        {
5030
1.67k
            D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'"));
5031
1.67k
            _res = a;
5032
1.67k
            if (_res == NULL && PyErr_Occurred()) {
5033
0
                p->error_indicator = 1;
5034
0
                p->level--;
5035
0
                return NULL;
5036
0
            }
5037
1.67k
            goto done;
5038
1.67k
        }
5039
23.6k
        p->mark = _mark;
5040
23.6k
        D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
5041
23.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' &')'"));
5042
23.6k
    }
5043
0
    _res = NULL;
5044
25.5k
  done:
5045
25.5k
    p->level--;
5046
25.5k
    return _res;
5047
23.6k
}
5048
5049
// slash_with_default:
5050
//     | param_no_default* param_with_default+ '/' ','
5051
//     | param_no_default* param_with_default+ '/' &')'
5052
static SlashWithDefault*
5053
slash_with_default_rule(Parser *p)
5054
24.0k
{
5055
24.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5056
0
        _Pypegen_stack_overflow(p);
5057
0
    }
5058
24.0k
    if (p->error_indicator) {
5059
0
        p->level--;
5060
0
        return NULL;
5061
0
    }
5062
24.0k
    SlashWithDefault* _res = NULL;
5063
24.0k
    int _mark = p->mark;
5064
24.0k
    { // param_no_default* param_with_default+ '/' ','
5065
24.0k
        if (p->error_indicator) {
5066
0
            p->level--;
5067
0
            return NULL;
5068
0
        }
5069
24.0k
        D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
5070
24.0k
        Token * _literal;
5071
24.0k
        Token * _literal_1;
5072
24.0k
        asdl_seq * a;
5073
24.0k
        asdl_seq * b;
5074
24.0k
        if (
5075
24.0k
            (a = _loop0_27_rule(p))  // param_no_default*
5076
24.0k
            &&
5077
24.0k
            (b = _loop1_30_rule(p))  // param_with_default+
5078
24.0k
            &&
5079
24.0k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
5080
24.0k
            &&
5081
24.0k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
5082
24.0k
        )
5083
189
        {
5084
189
            D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
5085
189
            _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq* ) a , b );
5086
189
            if (_res == NULL && PyErr_Occurred()) {
5087
0
                p->error_indicator = 1;
5088
0
                p->level--;
5089
0
                return NULL;
5090
0
            }
5091
189
            goto done;
5092
189
        }
5093
23.8k
        p->mark = _mark;
5094
23.8k
        D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
5095
23.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
5096
23.8k
    }
5097
0
    { // param_no_default* param_with_default+ '/' &')'
5098
23.8k
        if (p->error_indicator) {
5099
9
            p->level--;
5100
9
            return NULL;
5101
9
        }
5102
23.8k
        D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
5103
23.8k
        Token * _literal;
5104
23.8k
        asdl_seq * a;
5105
23.8k
        asdl_seq * b;
5106
23.8k
        if (
5107
23.8k
            (a = _loop0_27_rule(p))  // param_no_default*
5108
23.8k
            &&
5109
23.8k
            (b = _loop1_30_rule(p))  // param_with_default+
5110
23.8k
            &&
5111
23.8k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
5112
23.8k
            &&
5113
23.8k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
5114
23.8k
        )
5115
2.02k
        {
5116
2.02k
            D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
5117
2.02k
            _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq* ) a , b );
5118
2.02k
            if (_res == NULL && PyErr_Occurred()) {
5119
0
                p->error_indicator = 1;
5120
0
                p->level--;
5121
0
                return NULL;
5122
0
            }
5123
2.02k
            goto done;
5124
2.02k
        }
5125
21.8k
        p->mark = _mark;
5126
21.8k
        D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
5127
21.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
5128
21.8k
    }
5129
0
    _res = NULL;
5130
24.0k
  done:
5131
24.0k
    p->level--;
5132
24.0k
    return _res;
5133
21.8k
}
5134
5135
// star_etc:
5136
//     | invalid_star_etc
5137
//     | '*' param_no_default param_maybe_default* kwds?
5138
//     | '*' param_no_default_star_annotation param_maybe_default* kwds?
5139
//     | '*' ',' param_maybe_default+ kwds?
5140
//     | kwds
5141
static StarEtc*
5142
star_etc_rule(Parser *p)
5143
12.6k
{
5144
12.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5145
0
        _Pypegen_stack_overflow(p);
5146
0
    }
5147
12.6k
    if (p->error_indicator) {
5148
1
        p->level--;
5149
1
        return NULL;
5150
1
    }
5151
12.6k
    StarEtc* _res = NULL;
5152
12.6k
    int _mark = p->mark;
5153
12.6k
    if (p->call_invalid_rules) { // invalid_star_etc
5154
4.29k
        if (p->error_indicator) {
5155
0
            p->level--;
5156
0
            return NULL;
5157
0
        }
5158
4.29k
        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_star_etc"));
5159
4.29k
        void *invalid_star_etc_var;
5160
4.29k
        if (
5161
4.29k
            (invalid_star_etc_var = invalid_star_etc_rule(p))  // invalid_star_etc
5162
4.29k
        )
5163
0
        {
5164
0
            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_star_etc"));
5165
0
            _res = invalid_star_etc_var;
5166
0
            goto done;
5167
0
        }
5168
4.29k
        p->mark = _mark;
5169
4.29k
        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
5170
4.29k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_star_etc"));
5171
4.29k
    }
5172
12.6k
    { // '*' param_no_default param_maybe_default* kwds?
5173
12.6k
        if (p->error_indicator) {
5174
7
            p->level--;
5175
7
            return NULL;
5176
7
        }
5177
12.6k
        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
5178
12.6k
        Token * _literal;
5179
12.6k
        arg_ty a;
5180
12.6k
        asdl_seq * b;
5181
12.6k
        void *c;
5182
12.6k
        if (
5183
12.6k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
5184
12.6k
            &&
5185
12.6k
            (a = param_no_default_rule(p))  // param_no_default
5186
12.6k
            &&
5187
12.6k
            (b = _loop0_31_rule(p))  // param_maybe_default*
5188
12.6k
            &&
5189
12.6k
            (c = kwds_rule(p), !p->error_indicator)  // kwds?
5190
12.6k
        )
5191
761
        {
5192
761
            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
5193
761
            _res = _PyPegen_star_etc ( p , a , b , c );
5194
761
            if (_res == NULL && PyErr_Occurred()) {
5195
0
                p->error_indicator = 1;
5196
0
                p->level--;
5197
0
                return NULL;
5198
0
            }
5199
761
            goto done;
5200
761
        }
5201
11.8k
        p->mark = _mark;
5202
11.8k
        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
5203
11.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
5204
11.8k
    }
5205
0
    { // '*' param_no_default_star_annotation param_maybe_default* kwds?
5206
11.8k
        if (p->error_indicator) {
5207
6
            p->level--;
5208
6
            return NULL;
5209
6
        }
5210
11.8k
        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param_no_default_star_annotation param_maybe_default* kwds?"));
5211
11.8k
        Token * _literal;
5212
11.8k
        arg_ty a;
5213
11.8k
        asdl_seq * b;
5214
11.8k
        void *c;
5215
11.8k
        if (
5216
11.8k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
5217
11.8k
            &&
5218
11.8k
            (a = param_no_default_star_annotation_rule(p))  // param_no_default_star_annotation
5219
11.8k
            &&
5220
11.8k
            (b = _loop0_31_rule(p))  // param_maybe_default*
5221
11.8k
            &&
5222
11.8k
            (c = kwds_rule(p), !p->error_indicator)  // kwds?
5223
11.8k
        )
5224
735
        {
5225
735
            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param_no_default_star_annotation param_maybe_default* kwds?"));
5226
735
            _res = _PyPegen_star_etc ( p , a , b , c );
5227
735
            if (_res == NULL && PyErr_Occurred()) {
5228
0
                p->error_indicator = 1;
5229
0
                p->level--;
5230
0
                return NULL;
5231
0
            }
5232
735
            goto done;
5233
735
        }
5234
11.1k
        p->mark = _mark;
5235
11.1k
        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
5236
11.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' param_no_default_star_annotation param_maybe_default* kwds?"));
5237
11.1k
    }
5238
0
    { // '*' ',' param_maybe_default+ kwds?
5239
11.1k
        if (p->error_indicator) {
5240
4
            p->level--;
5241
4
            return NULL;
5242
4
        }
5243
11.1k
        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
5244
11.1k
        Token * _literal;
5245
11.1k
        Token * _literal_1;
5246
11.1k
        asdl_seq * b;
5247
11.1k
        void *c;
5248
11.1k
        if (
5249
11.1k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
5250
11.1k
            &&
5251
11.1k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
5252
11.1k
            &&
5253
11.1k
            (b = _loop1_32_rule(p))  // param_maybe_default+
5254
11.1k
            &&
5255
11.1k
            (c = kwds_rule(p), !p->error_indicator)  // kwds?
5256
11.1k
        )
5257
1.06k
        {
5258
1.06k
            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
5259
1.06k
            _res = _PyPegen_star_etc ( p , NULL , b , c );
5260
1.06k
            if (_res == NULL && PyErr_Occurred()) {
5261
0
                p->error_indicator = 1;
5262
0
                p->level--;
5263
0
                return NULL;
5264
0
            }
5265
1.06k
            goto done;
5266
1.06k
        }
5267
10.0k
        p->mark = _mark;
5268
10.0k
        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
5269
10.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
5270
10.0k
    }
5271
0
    { // kwds
5272
10.0k
        if (p->error_indicator) {
5273
4
            p->level--;
5274
4
            return NULL;
5275
4
        }
5276
10.0k
        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwds"));
5277
10.0k
        arg_ty a;
5278
10.0k
        if (
5279
10.0k
            (a = kwds_rule(p))  // kwds
5280
10.0k
        )
5281
442
        {
5282
442
            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwds"));
5283
442
            _res = _PyPegen_star_etc ( p , NULL , NULL , a );
5284
442
            if (_res == NULL && PyErr_Occurred()) {
5285
0
                p->error_indicator = 1;
5286
0
                p->level--;
5287
0
                return NULL;
5288
0
            }
5289
442
            goto done;
5290
442
        }
5291
9.62k
        p->mark = _mark;
5292
9.62k
        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
5293
9.62k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwds"));
5294
9.62k
    }
5295
0
    _res = NULL;
5296
12.6k
  done:
5297
12.6k
    p->level--;
5298
12.6k
    return _res;
5299
9.62k
}
5300
5301
// kwds: invalid_kwds | '**' param_no_default
5302
static arg_ty
5303
kwds_rule(Parser *p)
5304
12.6k
{
5305
12.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5306
0
        _Pypegen_stack_overflow(p);
5307
0
    }
5308
12.6k
    if (p->error_indicator) {
5309
2
        p->level--;
5310
2
        return NULL;
5311
2
    }
5312
12.6k
    arg_ty _res = NULL;
5313
12.6k
    int _mark = p->mark;
5314
12.6k
    if (p->call_invalid_rules) { // invalid_kwds
5315
4.29k
        if (p->error_indicator) {
5316
0
            p->level--;
5317
0
            return NULL;
5318
0
        }
5319
4.29k
        D(fprintf(stderr, "%*c> kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwds"));
5320
4.29k
        void *invalid_kwds_var;
5321
4.29k
        if (
5322
4.29k
            (invalid_kwds_var = invalid_kwds_rule(p))  // invalid_kwds
5323
4.29k
        )
5324
0
        {
5325
0
            D(fprintf(stderr, "%*c+ kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwds"));
5326
0
            _res = invalid_kwds_var;
5327
0
            goto done;
5328
0
        }
5329
4.29k
        p->mark = _mark;
5330
4.29k
        D(fprintf(stderr, "%*c%s kwds[%d-%d]: %s failed!\n", p->level, ' ',
5331
4.29k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwds"));
5332
4.29k
    }
5333
12.6k
    { // '**' param_no_default
5334
12.6k
        if (p->error_indicator) {
5335
8
            p->level--;
5336
8
            return NULL;
5337
8
        }
5338
12.6k
        D(fprintf(stderr, "%*c> kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param_no_default"));
5339
12.6k
        Token * _literal;
5340
12.6k
        arg_ty a;
5341
12.6k
        if (
5342
12.6k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
5343
12.6k
            &&
5344
12.6k
            (a = param_no_default_rule(p))  // param_no_default
5345
12.6k
        )
5346
535
        {
5347
535
            D(fprintf(stderr, "%*c+ kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param_no_default"));
5348
535
            _res = a;
5349
535
            if (_res == NULL && PyErr_Occurred()) {
5350
0
                p->error_indicator = 1;
5351
0
                p->level--;
5352
0
                return NULL;
5353
0
            }
5354
535
            goto done;
5355
535
        }
5356
12.0k
        p->mark = _mark;
5357
12.0k
        D(fprintf(stderr, "%*c%s kwds[%d-%d]: %s failed!\n", p->level, ' ',
5358
12.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param_no_default"));
5359
12.0k
    }
5360
0
    _res = NULL;
5361
12.6k
  done:
5362
12.6k
    p->level--;
5363
12.6k
    return _res;
5364
12.0k
}
5365
5366
// param_no_default: param ',' TYPE_COMMENT? | param TYPE_COMMENT? &')'
5367
static arg_ty
5368
param_no_default_rule(Parser *p)
5369
193k
{
5370
193k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5371
0
        _Pypegen_stack_overflow(p);
5372
0
    }
5373
193k
    if (p->error_indicator) {
5374
0
        p->level--;
5375
0
        return NULL;
5376
0
    }
5377
193k
    arg_ty _res = NULL;
5378
193k
    int _mark = p->mark;
5379
193k
    { // param ',' TYPE_COMMENT?
5380
193k
        if (p->error_indicator) {
5381
0
            p->level--;
5382
0
            return NULL;
5383
0
        }
5384
193k
        D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?"));
5385
193k
        Token * _literal;
5386
193k
        arg_ty a;
5387
193k
        void *tc;
5388
193k
        if (
5389
193k
            (a = param_rule(p))  // param
5390
193k
            &&
5391
193k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
5392
193k
            &&
5393
193k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
5394
193k
        )
5395
41.3k
        {
5396
41.3k
            D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?"));
5397
41.3k
            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
5398
41.3k
            if (_res == NULL && PyErr_Occurred()) {
5399
0
                p->error_indicator = 1;
5400
0
                p->level--;
5401
0
                return NULL;
5402
0
            }
5403
41.3k
            goto done;
5404
41.3k
        }
5405
152k
        p->mark = _mark;
5406
152k
        D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
5407
152k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param ',' TYPE_COMMENT?"));
5408
152k
    }
5409
0
    { // param TYPE_COMMENT? &')'
5410
152k
        if (p->error_indicator) {
5411
26
            p->level--;
5412
26
            return NULL;
5413
26
        }
5414
152k
        D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'"));
5415
152k
        arg_ty a;
5416
152k
        void *tc;
5417
152k
        if (
5418
152k
            (a = param_rule(p))  // param
5419
152k
            &&
5420
152k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
5421
152k
            &&
5422
152k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
5423
152k
        )
5424
29.0k
        {
5425
29.0k
            D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'"));
5426
29.0k
            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
5427
29.0k
            if (_res == NULL && PyErr_Occurred()) {
5428
0
                p->error_indicator = 1;
5429
0
                p->level--;
5430
0
                return NULL;
5431
0
            }
5432
29.0k
            goto done;
5433
29.0k
        }
5434
123k
        p->mark = _mark;
5435
123k
        D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
5436
123k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param TYPE_COMMENT? &')'"));
5437
123k
    }
5438
0
    _res = NULL;
5439
193k
  done:
5440
193k
    p->level--;
5441
193k
    return _res;
5442
123k
}
5443
5444
// param_no_default_star_annotation:
5445
//     | param_star_annotation ',' TYPE_COMMENT?
5446
//     | param_star_annotation TYPE_COMMENT? &')'
5447
static arg_ty
5448
param_no_default_star_annotation_rule(Parser *p)
5449
1.89k
{
5450
1.89k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5451
0
        _Pypegen_stack_overflow(p);
5452
0
    }
5453
1.89k
    if (p->error_indicator) {
5454
0
        p->level--;
5455
0
        return NULL;
5456
0
    }
5457
1.89k
    arg_ty _res = NULL;
5458
1.89k
    int _mark = p->mark;
5459
1.89k
    { // param_star_annotation ',' TYPE_COMMENT?
5460
1.89k
        if (p->error_indicator) {
5461
0
            p->level--;
5462
0
            return NULL;
5463
0
        }
5464
1.89k
        D(fprintf(stderr, "%*c> param_no_default_star_annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_star_annotation ',' TYPE_COMMENT?"));
5465
1.89k
        Token * _literal;
5466
1.89k
        arg_ty a;
5467
1.89k
        void *tc;
5468
1.89k
        if (
5469
1.89k
            (a = param_star_annotation_rule(p))  // param_star_annotation
5470
1.89k
            &&
5471
1.89k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
5472
1.89k
            &&
5473
1.89k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
5474
1.89k
        )
5475
147
        {
5476
147
            D(fprintf(stderr, "%*c+ param_no_default_star_annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_star_annotation ',' TYPE_COMMENT?"));
5477
147
            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
5478
147
            if (_res == NULL && PyErr_Occurred()) {
5479
0
                p->error_indicator = 1;
5480
0
                p->level--;
5481
0
                return NULL;
5482
0
            }
5483
147
            goto done;
5484
147
        }
5485
1.74k
        p->mark = _mark;
5486
1.74k
        D(fprintf(stderr, "%*c%s param_no_default_star_annotation[%d-%d]: %s failed!\n", p->level, ' ',
5487
1.74k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_star_annotation ',' TYPE_COMMENT?"));
5488
1.74k
    }
5489
0
    { // param_star_annotation TYPE_COMMENT? &')'
5490
1.74k
        if (p->error_indicator) {
5491
3
            p->level--;
5492
3
            return NULL;
5493
3
        }
5494
1.74k
        D(fprintf(stderr, "%*c> param_no_default_star_annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_star_annotation TYPE_COMMENT? &')'"));
5495
1.74k
        arg_ty a;
5496
1.74k
        void *tc;
5497
1.74k
        if (
5498
1.74k
            (a = param_star_annotation_rule(p))  // param_star_annotation
5499
1.74k
            &&
5500
1.74k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
5501
1.74k
            &&
5502
1.74k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
5503
1.74k
        )
5504
589
        {
5505
589
            D(fprintf(stderr, "%*c+ param_no_default_star_annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_star_annotation TYPE_COMMENT? &')'"));
5506
589
            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
5507
589
            if (_res == NULL && PyErr_Occurred()) {
5508
0
                p->error_indicator = 1;
5509
0
                p->level--;
5510
0
                return NULL;
5511
0
            }
5512
589
            goto done;
5513
589
        }
5514
1.15k
        p->mark = _mark;
5515
1.15k
        D(fprintf(stderr, "%*c%s param_no_default_star_annotation[%d-%d]: %s failed!\n", p->level, ' ',
5516
1.15k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_star_annotation TYPE_COMMENT? &')'"));
5517
1.15k
    }
5518
0
    _res = NULL;
5519
1.89k
  done:
5520
1.89k
    p->level--;
5521
1.89k
    return _res;
5522
1.15k
}
5523
5524
// param_with_default: param default ',' TYPE_COMMENT? | param default TYPE_COMMENT? &')'
5525
static NameDefaultPair*
5526
param_with_default_rule(Parser *p)
5527
87.7k
{
5528
87.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5529
0
        _Pypegen_stack_overflow(p);
5530
0
    }
5531
87.7k
    if (p->error_indicator) {
5532
0
        p->level--;
5533
0
        return NULL;
5534
0
    }
5535
87.7k
    NameDefaultPair* _res = NULL;
5536
87.7k
    int _mark = p->mark;
5537
87.7k
    { // param default ',' TYPE_COMMENT?
5538
87.7k
        if (p->error_indicator) {
5539
0
            p->level--;
5540
0
            return NULL;
5541
0
        }
5542
87.7k
        D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?"));
5543
87.7k
        Token * _literal;
5544
87.7k
        arg_ty a;
5545
87.7k
        expr_ty c;
5546
87.7k
        void *tc;
5547
87.7k
        if (
5548
87.7k
            (a = param_rule(p))  // param
5549
87.7k
            &&
5550
87.7k
            (c = default_rule(p))  // default
5551
87.7k
            &&
5552
87.7k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
5553
87.7k
            &&
5554
87.7k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
5555
87.7k
        )
5556
15.4k
        {
5557
15.4k
            D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?"));
5558
15.4k
            _res = _PyPegen_name_default_pair ( p , a , c , tc );
5559
15.4k
            if (_res == NULL && PyErr_Occurred()) {
5560
0
                p->error_indicator = 1;
5561
0
                p->level--;
5562
0
                return NULL;
5563
0
            }
5564
15.4k
            goto done;
5565
15.4k
        }
5566
72.3k
        p->mark = _mark;
5567
72.3k
        D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
5568
72.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default ',' TYPE_COMMENT?"));
5569
72.3k
    }
5570
0
    { // param default TYPE_COMMENT? &')'
5571
72.3k
        if (p->error_indicator) {
5572
9
            p->level--;
5573
9
            return NULL;
5574
9
        }
5575
72.3k
        D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'"));
5576
72.3k
        arg_ty a;
5577
72.3k
        expr_ty c;
5578
72.3k
        void *tc;
5579
72.3k
        if (
5580
72.3k
            (a = param_rule(p))  // param
5581
72.3k
            &&
5582
72.3k
            (c = default_rule(p))  // default
5583
72.3k
            &&
5584
72.3k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
5585
72.3k
            &&
5586
72.3k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
5587
72.3k
        )
5588
7.89k
        {
5589
7.89k
            D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'"));
5590
7.89k
            _res = _PyPegen_name_default_pair ( p , a , c , tc );
5591
7.89k
            if (_res == NULL && PyErr_Occurred()) {
5592
0
                p->error_indicator = 1;
5593
0
                p->level--;
5594
0
                return NULL;
5595
0
            }
5596
7.89k
            goto done;
5597
7.89k
        }
5598
64.4k
        p->mark = _mark;
5599
64.4k
        D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
5600
64.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default TYPE_COMMENT? &')'"));
5601
64.4k
    }
5602
0
    _res = NULL;
5603
87.7k
  done:
5604
87.7k
    p->level--;
5605
87.7k
    return _res;
5606
64.4k
}
5607
5608
// param_maybe_default:
5609
//     | param default? ',' TYPE_COMMENT?
5610
//     | param default? TYPE_COMMENT? &')'
5611
static NameDefaultPair*
5612
param_maybe_default_rule(Parser *p)
5613
25.2k
{
5614
25.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5615
0
        _Pypegen_stack_overflow(p);
5616
0
    }
5617
25.2k
    if (p->error_indicator) {
5618
0
        p->level--;
5619
0
        return NULL;
5620
0
    }
5621
25.2k
    NameDefaultPair* _res = NULL;
5622
25.2k
    int _mark = p->mark;
5623
25.2k
    { // param default? ',' TYPE_COMMENT?
5624
25.2k
        if (p->error_indicator) {
5625
0
            p->level--;
5626
0
            return NULL;
5627
0
        }
5628
25.2k
        D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
5629
25.2k
        Token * _literal;
5630
25.2k
        arg_ty a;
5631
25.2k
        void *c;
5632
25.2k
        void *tc;
5633
25.2k
        if (
5634
25.2k
            (a = param_rule(p))  // param
5635
25.2k
            &&
5636
25.2k
            (c = default_rule(p), !p->error_indicator)  // default?
5637
25.2k
            &&
5638
25.2k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
5639
25.2k
            &&
5640
25.2k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
5641
25.2k
        )
5642
6.75k
        {
5643
6.75k
            D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
5644
6.75k
            _res = _PyPegen_name_default_pair ( p , a , c , tc );
5645
6.75k
            if (_res == NULL && PyErr_Occurred()) {
5646
0
                p->error_indicator = 1;
5647
0
                p->level--;
5648
0
                return NULL;
5649
0
            }
5650
6.75k
            goto done;
5651
6.75k
        }
5652
18.5k
        p->mark = _mark;
5653
18.5k
        D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
5654
18.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
5655
18.5k
    }
5656
0
    { // param default? TYPE_COMMENT? &')'
5657
18.5k
        if (p->error_indicator) {
5658
9
            p->level--;
5659
9
            return NULL;
5660
9
        }
5661
18.5k
        D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
5662
18.5k
        arg_ty a;
5663
18.5k
        void *c;
5664
18.5k
        void *tc;
5665
18.5k
        if (
5666
18.5k
            (a = param_rule(p))  // param
5667
18.5k
            &&
5668
18.5k
            (c = default_rule(p), !p->error_indicator)  // default?
5669
18.5k
            &&
5670
18.5k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
5671
18.5k
            &&
5672
18.5k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
5673
18.5k
        )
5674
4.45k
        {
5675
4.45k
            D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
5676
4.45k
            _res = _PyPegen_name_default_pair ( p , a , c , tc );
5677
4.45k
            if (_res == NULL && PyErr_Occurred()) {
5678
0
                p->error_indicator = 1;
5679
0
                p->level--;
5680
0
                return NULL;
5681
0
            }
5682
4.45k
            goto done;
5683
4.45k
        }
5684
14.0k
        p->mark = _mark;
5685
14.0k
        D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
5686
14.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
5687
14.0k
    }
5688
0
    _res = NULL;
5689
25.2k
  done:
5690
25.2k
    p->level--;
5691
25.2k
    return _res;
5692
14.0k
}
5693
5694
// param: NAME annotation?
5695
static arg_ty
5696
param_rule(Parser *p)
5697
552k
{
5698
552k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5699
0
        _Pypegen_stack_overflow(p);
5700
0
    }
5701
552k
    if (p->error_indicator) {
5702
0
        p->level--;
5703
0
        return NULL;
5704
0
    }
5705
552k
    arg_ty _res = NULL;
5706
552k
    int _mark = p->mark;
5707
552k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
5708
16
        p->error_indicator = 1;
5709
16
        p->level--;
5710
16
        return NULL;
5711
16
    }
5712
552k
    int _start_lineno = p->tokens[_mark]->lineno;
5713
552k
    UNUSED(_start_lineno); // Only used by EXTRA macro
5714
552k
    int _start_col_offset = p->tokens[_mark]->col_offset;
5715
552k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
5716
552k
    { // NAME annotation?
5717
552k
        if (p->error_indicator) {
5718
0
            p->level--;
5719
0
            return NULL;
5720
0
        }
5721
552k
        D(fprintf(stderr, "%*c> param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME annotation?"));
5722
552k
        expr_ty a;
5723
552k
        void *b;
5724
552k
        if (
5725
552k
            (a = _PyPegen_name_token(p))  // NAME
5726
552k
            &&
5727
552k
            (b = annotation_rule(p), !p->error_indicator)  // annotation?
5728
552k
        )
5729
213k
        {
5730
213k
            D(fprintf(stderr, "%*c+ param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME annotation?"));
5731
213k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
5732
213k
            if (_token == NULL) {
5733
0
                p->level--;
5734
0
                return NULL;
5735
0
            }
5736
213k
            int _end_lineno = _token->end_lineno;
5737
213k
            UNUSED(_end_lineno); // Only used by EXTRA macro
5738
213k
            int _end_col_offset = _token->end_col_offset;
5739
213k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
5740
213k
            _res = _PyAST_arg ( a -> v . Name . id , b , NULL , EXTRA );
5741
213k
            if (_res == NULL && PyErr_Occurred()) {
5742
0
                p->error_indicator = 1;
5743
0
                p->level--;
5744
0
                return NULL;
5745
0
            }
5746
213k
            goto done;
5747
213k
        }
5748
338k
        p->mark = _mark;
5749
338k
        D(fprintf(stderr, "%*c%s param[%d-%d]: %s failed!\n", p->level, ' ',
5750
338k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME annotation?"));
5751
338k
    }
5752
0
    _res = NULL;
5753
552k
  done:
5754
552k
    p->level--;
5755
552k
    return _res;
5756
338k
}
5757
5758
// param_star_annotation: NAME star_annotation
5759
static arg_ty
5760
param_star_annotation_rule(Parser *p)
5761
3.63k
{
5762
3.63k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5763
0
        _Pypegen_stack_overflow(p);
5764
0
    }
5765
3.63k
    if (p->error_indicator) {
5766
0
        p->level--;
5767
0
        return NULL;
5768
0
    }
5769
3.63k
    arg_ty _res = NULL;
5770
3.63k
    int _mark = p->mark;
5771
3.63k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
5772
0
        p->error_indicator = 1;
5773
0
        p->level--;
5774
0
        return NULL;
5775
0
    }
5776
3.63k
    int _start_lineno = p->tokens[_mark]->lineno;
5777
3.63k
    UNUSED(_start_lineno); // Only used by EXTRA macro
5778
3.63k
    int _start_col_offset = p->tokens[_mark]->col_offset;
5779
3.63k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
5780
3.63k
    { // NAME star_annotation
5781
3.63k
        if (p->error_indicator) {
5782
0
            p->level--;
5783
0
            return NULL;
5784
0
        }
5785
3.63k
        D(fprintf(stderr, "%*c> param_star_annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME star_annotation"));
5786
3.63k
        expr_ty a;
5787
3.63k
        expr_ty b;
5788
3.63k
        if (
5789
3.63k
            (a = _PyPegen_name_token(p))  // NAME
5790
3.63k
            &&
5791
3.63k
            (b = star_annotation_rule(p))  // star_annotation
5792
3.63k
        )
5793
1.36k
        {
5794
1.36k
            D(fprintf(stderr, "%*c+ param_star_annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME star_annotation"));
5795
1.36k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
5796
1.36k
            if (_token == NULL) {
5797
0
                p->level--;
5798
0
                return NULL;
5799
0
            }
5800
1.36k
            int _end_lineno = _token->end_lineno;
5801
1.36k
            UNUSED(_end_lineno); // Only used by EXTRA macro
5802
1.36k
            int _end_col_offset = _token->end_col_offset;
5803
1.36k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
5804
1.36k
            _res = _PyAST_arg ( a -> v . Name . id , b , NULL , EXTRA );
5805
1.36k
            if (_res == NULL && PyErr_Occurred()) {
5806
0
                p->error_indicator = 1;
5807
0
                p->level--;
5808
0
                return NULL;
5809
0
            }
5810
1.36k
            goto done;
5811
1.36k
        }
5812
2.27k
        p->mark = _mark;
5813
2.27k
        D(fprintf(stderr, "%*c%s param_star_annotation[%d-%d]: %s failed!\n", p->level, ' ',
5814
2.27k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME star_annotation"));
5815
2.27k
    }
5816
0
    _res = NULL;
5817
3.63k
  done:
5818
3.63k
    p->level--;
5819
3.63k
    return _res;
5820
2.27k
}
5821
5822
// annotation: ':' expression
5823
static expr_ty
5824
annotation_rule(Parser *p)
5825
213k
{
5826
213k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5827
0
        _Pypegen_stack_overflow(p);
5828
0
    }
5829
213k
    if (p->error_indicator) {
5830
0
        p->level--;
5831
0
        return NULL;
5832
0
    }
5833
213k
    expr_ty _res = NULL;
5834
213k
    int _mark = p->mark;
5835
213k
    { // ':' expression
5836
213k
        if (p->error_indicator) {
5837
0
            p->level--;
5838
0
            return NULL;
5839
0
        }
5840
213k
        D(fprintf(stderr, "%*c> annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression"));
5841
213k
        Token * _literal;
5842
213k
        expr_ty a;
5843
213k
        if (
5844
213k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
5845
213k
            &&
5846
213k
            (a = expression_rule(p))  // expression
5847
213k
        )
5848
3.76k
        {
5849
3.76k
            D(fprintf(stderr, "%*c+ annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression"));
5850
3.76k
            _res = a;
5851
3.76k
            if (_res == NULL && PyErr_Occurred()) {
5852
0
                p->error_indicator = 1;
5853
0
                p->level--;
5854
0
                return NULL;
5855
0
            }
5856
3.76k
            goto done;
5857
3.76k
        }
5858
209k
        p->mark = _mark;
5859
209k
        D(fprintf(stderr, "%*c%s annotation[%d-%d]: %s failed!\n", p->level, ' ',
5860
209k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression"));
5861
209k
    }
5862
0
    _res = NULL;
5863
213k
  done:
5864
213k
    p->level--;
5865
213k
    return _res;
5866
209k
}
5867
5868
// star_annotation: ':' star_expression
5869
static expr_ty
5870
star_annotation_rule(Parser *p)
5871
1.41k
{
5872
1.41k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5873
0
        _Pypegen_stack_overflow(p);
5874
0
    }
5875
1.41k
    if (p->error_indicator) {
5876
0
        p->level--;
5877
0
        return NULL;
5878
0
    }
5879
1.41k
    expr_ty _res = NULL;
5880
1.41k
    int _mark = p->mark;
5881
1.41k
    { // ':' star_expression
5882
1.41k
        if (p->error_indicator) {
5883
0
            p->level--;
5884
0
            return NULL;
5885
0
        }
5886
1.41k
        D(fprintf(stderr, "%*c> star_annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' star_expression"));
5887
1.41k
        Token * _literal;
5888
1.41k
        expr_ty a;
5889
1.41k
        if (
5890
1.41k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
5891
1.41k
            &&
5892
1.41k
            (a = star_expression_rule(p))  // star_expression
5893
1.41k
        )
5894
1.36k
        {
5895
1.36k
            D(fprintf(stderr, "%*c+ star_annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' star_expression"));
5896
1.36k
            _res = a;
5897
1.36k
            if (_res == NULL && PyErr_Occurred()) {
5898
0
                p->error_indicator = 1;
5899
0
                p->level--;
5900
0
                return NULL;
5901
0
            }
5902
1.36k
            goto done;
5903
1.36k
        }
5904
48
        p->mark = _mark;
5905
48
        D(fprintf(stderr, "%*c%s star_annotation[%d-%d]: %s failed!\n", p->level, ' ',
5906
48
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' star_expression"));
5907
48
    }
5908
0
    _res = NULL;
5909
1.41k
  done:
5910
1.41k
    p->level--;
5911
1.41k
    return _res;
5912
48
}
5913
5914
// default: '=' expression | invalid_default
5915
static expr_ty
5916
default_rule(Parser *p)
5917
144k
{
5918
144k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5919
0
        _Pypegen_stack_overflow(p);
5920
0
    }
5921
144k
    if (p->error_indicator) {
5922
0
        p->level--;
5923
0
        return NULL;
5924
0
    }
5925
144k
    expr_ty _res = NULL;
5926
144k
    int _mark = p->mark;
5927
144k
    { // '=' expression
5928
144k
        if (p->error_indicator) {
5929
0
            p->level--;
5930
0
            return NULL;
5931
0
        }
5932
144k
        D(fprintf(stderr, "%*c> default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' expression"));
5933
144k
        Token * _literal;
5934
144k
        expr_ty a;
5935
144k
        if (
5936
144k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
5937
144k
            &&
5938
144k
            (a = expression_rule(p))  // expression
5939
144k
        )
5940
79.6k
        {
5941
79.6k
            D(fprintf(stderr, "%*c+ default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' expression"));
5942
79.6k
            _res = a;
5943
79.6k
            if (_res == NULL && PyErr_Occurred()) {
5944
0
                p->error_indicator = 1;
5945
0
                p->level--;
5946
0
                return NULL;
5947
0
            }
5948
79.6k
            goto done;
5949
79.6k
        }
5950
64.8k
        p->mark = _mark;
5951
64.8k
        D(fprintf(stderr, "%*c%s default[%d-%d]: %s failed!\n", p->level, ' ',
5952
64.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' expression"));
5953
64.8k
    }
5954
64.8k
    if (p->call_invalid_rules) { // invalid_default
5955
54.2k
        if (p->error_indicator) {
5956
652
            p->level--;
5957
652
            return NULL;
5958
652
        }
5959
53.5k
        D(fprintf(stderr, "%*c> default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_default"));
5960
53.5k
        void *invalid_default_var;
5961
53.5k
        if (
5962
53.5k
            (invalid_default_var = invalid_default_rule(p))  // invalid_default
5963
53.5k
        )
5964
0
        {
5965
0
            D(fprintf(stderr, "%*c+ default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_default"));
5966
0
            _res = invalid_default_var;
5967
0
            goto done;
5968
0
        }
5969
53.5k
        p->mark = _mark;
5970
53.5k
        D(fprintf(stderr, "%*c%s default[%d-%d]: %s failed!\n", p->level, ' ',
5971
53.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_default"));
5972
53.5k
    }
5973
64.1k
    _res = NULL;
5974
143k
  done:
5975
143k
    p->level--;
5976
143k
    return _res;
5977
64.1k
}
5978
5979
// if_stmt:
5980
//     | invalid_if_stmt
5981
//     | 'if' named_expression ':' block elif_stmt
5982
//     | 'if' named_expression ':' block else_block?
5983
static stmt_ty
5984
if_stmt_rule(Parser *p)
5985
7.66k
{
5986
7.66k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
5987
0
        _Pypegen_stack_overflow(p);
5988
0
    }
5989
7.66k
    if (p->error_indicator) {
5990
0
        p->level--;
5991
0
        return NULL;
5992
0
    }
5993
7.66k
    stmt_ty _res = NULL;
5994
7.66k
    int _mark = p->mark;
5995
7.66k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
5996
0
        p->error_indicator = 1;
5997
0
        p->level--;
5998
0
        return NULL;
5999
0
    }
6000
7.66k
    int _start_lineno = p->tokens[_mark]->lineno;
6001
7.66k
    UNUSED(_start_lineno); // Only used by EXTRA macro
6002
7.66k
    int _start_col_offset = p->tokens[_mark]->col_offset;
6003
7.66k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
6004
7.66k
    if (p->call_invalid_rules) { // invalid_if_stmt
6005
718
        if (p->error_indicator) {
6006
0
            p->level--;
6007
0
            return NULL;
6008
0
        }
6009
718
        D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt"));
6010
718
        void *invalid_if_stmt_var;
6011
718
        if (
6012
718
            (invalid_if_stmt_var = invalid_if_stmt_rule(p))  // invalid_if_stmt
6013
718
        )
6014
0
        {
6015
0
            D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt"));
6016
0
            _res = invalid_if_stmt_var;
6017
0
            goto done;
6018
0
        }
6019
718
        p->mark = _mark;
6020
718
        D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6021
718
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_if_stmt"));
6022
718
    }
6023
7.66k
    { // 'if' named_expression ':' block elif_stmt
6024
7.66k
        if (p->error_indicator) {
6025
9
            p->level--;
6026
9
            return NULL;
6027
9
        }
6028
7.65k
        D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
6029
7.65k
        Token * _keyword;
6030
7.65k
        Token * _literal;
6031
7.65k
        expr_ty a;
6032
7.65k
        asdl_stmt_seq* b;
6033
7.65k
        stmt_ty c;
6034
7.65k
        if (
6035
7.65k
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
6036
7.65k
            &&
6037
7.65k
            (a = named_expression_rule(p))  // named_expression
6038
7.65k
            &&
6039
7.65k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
6040
7.65k
            &&
6041
7.65k
            (b = block_rule(p))  // block
6042
7.65k
            &&
6043
7.65k
            (c = elif_stmt_rule(p))  // elif_stmt
6044
7.65k
        )
6045
549
        {
6046
549
            D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
6047
549
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6048
549
            if (_token == NULL) {
6049
0
                p->level--;
6050
0
                return NULL;
6051
0
            }
6052
549
            int _end_lineno = _token->end_lineno;
6053
549
            UNUSED(_end_lineno); // Only used by EXTRA macro
6054
549
            int _end_col_offset = _token->end_col_offset;
6055
549
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6056
549
            _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq* , _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
6057
549
            if (_res == NULL && PyErr_Occurred()) {
6058
0
                p->error_indicator = 1;
6059
0
                p->level--;
6060
0
                return NULL;
6061
0
            }
6062
549
            goto done;
6063
549
        }
6064
7.10k
        p->mark = _mark;
6065
7.10k
        D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6066
7.10k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
6067
7.10k
    }
6068
0
    { // 'if' named_expression ':' block else_block?
6069
7.10k
        if (p->error_indicator) {
6070
40
            p->level--;
6071
40
            return NULL;
6072
40
        }
6073
7.06k
        D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?"));
6074
7.06k
        Token * _keyword;
6075
7.06k
        Token * _literal;
6076
7.06k
        expr_ty a;
6077
7.06k
        asdl_stmt_seq* b;
6078
7.06k
        void *c;
6079
7.06k
        if (
6080
7.06k
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
6081
7.06k
            &&
6082
7.06k
            (a = named_expression_rule(p))  // named_expression
6083
7.06k
            &&
6084
7.06k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
6085
7.06k
            &&
6086
7.06k
            (b = block_rule(p))  // block
6087
7.06k
            &&
6088
7.06k
            (c = else_block_rule(p), !p->error_indicator)  // else_block?
6089
7.06k
        )
6090
6.96k
        {
6091
6.96k
            D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?"));
6092
6.96k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6093
6.96k
            if (_token == NULL) {
6094
0
                p->level--;
6095
0
                return NULL;
6096
0
            }
6097
6.96k
            int _end_lineno = _token->end_lineno;
6098
6.96k
            UNUSED(_end_lineno); // Only used by EXTRA macro
6099
6.96k
            int _end_col_offset = _token->end_col_offset;
6100
6.96k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6101
6.96k
            _res = _PyAST_If ( a , b , c , EXTRA );
6102
6.96k
            if (_res == NULL && PyErr_Occurred()) {
6103
0
                p->error_indicator = 1;
6104
0
                p->level--;
6105
0
                return NULL;
6106
0
            }
6107
6.96k
            goto done;
6108
6.96k
        }
6109
97
        p->mark = _mark;
6110
97
        D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6111
97
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block else_block?"));
6112
97
    }
6113
0
    _res = NULL;
6114
7.61k
  done:
6115
7.61k
    p->level--;
6116
7.61k
    return _res;
6117
97
}
6118
6119
// elif_stmt:
6120
//     | invalid_elif_stmt
6121
//     | 'elif' named_expression ':' block elif_stmt
6122
//     | 'elif' named_expression ':' block else_block?
6123
static stmt_ty
6124
elif_stmt_rule(Parser *p)
6125
9.21k
{
6126
9.21k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
6127
0
        _Pypegen_stack_overflow(p);
6128
0
    }
6129
9.21k
    if (p->error_indicator) {
6130
0
        p->level--;
6131
0
        return NULL;
6132
0
    }
6133
9.21k
    stmt_ty _res = NULL;
6134
9.21k
    int _mark = p->mark;
6135
9.21k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
6136
2
        p->error_indicator = 1;
6137
2
        p->level--;
6138
2
        return NULL;
6139
2
    }
6140
9.21k
    int _start_lineno = p->tokens[_mark]->lineno;
6141
9.21k
    UNUSED(_start_lineno); // Only used by EXTRA macro
6142
9.21k
    int _start_col_offset = p->tokens[_mark]->col_offset;
6143
9.21k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
6144
9.21k
    if (p->call_invalid_rules) { // invalid_elif_stmt
6145
1.00k
        if (p->error_indicator) {
6146
0
            p->level--;
6147
0
            return NULL;
6148
0
        }
6149
1.00k
        D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt"));
6150
1.00k
        void *invalid_elif_stmt_var;
6151
1.00k
        if (
6152
1.00k
            (invalid_elif_stmt_var = invalid_elif_stmt_rule(p))  // invalid_elif_stmt
6153
1.00k
        )
6154
0
        {
6155
0
            D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt"));
6156
0
            _res = invalid_elif_stmt_var;
6157
0
            goto done;
6158
0
        }
6159
1.00k
        p->mark = _mark;
6160
1.00k
        D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6161
1.00k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_elif_stmt"));
6162
1.00k
    }
6163
9.21k
    { // 'elif' named_expression ':' block elif_stmt
6164
9.21k
        if (p->error_indicator) {
6165
9
            p->level--;
6166
9
            return NULL;
6167
9
        }
6168
9.20k
        D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
6169
9.20k
        Token * _keyword;
6170
9.20k
        Token * _literal;
6171
9.20k
        expr_ty a;
6172
9.20k
        asdl_stmt_seq* b;
6173
9.20k
        stmt_ty c;
6174
9.20k
        if (
6175
9.20k
            (_keyword = _PyPegen_expect_token(p, 692))  // token='elif'
6176
9.20k
            &&
6177
9.20k
            (a = named_expression_rule(p))  // named_expression
6178
9.20k
            &&
6179
9.20k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
6180
9.20k
            &&
6181
9.20k
            (b = block_rule(p))  // block
6182
9.20k
            &&
6183
9.20k
            (c = elif_stmt_rule(p))  // elif_stmt
6184
9.20k
        )
6185
923
        {
6186
923
            D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
6187
923
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6188
923
            if (_token == NULL) {
6189
0
                p->level--;
6190
0
                return NULL;
6191
0
            }
6192
923
            int _end_lineno = _token->end_lineno;
6193
923
            UNUSED(_end_lineno); // Only used by EXTRA macro
6194
923
            int _end_col_offset = _token->end_col_offset;
6195
923
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6196
923
            _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq* , _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
6197
923
            if (_res == NULL && PyErr_Occurred()) {
6198
0
                p->error_indicator = 1;
6199
0
                p->level--;
6200
0
                return NULL;
6201
0
            }
6202
923
            goto done;
6203
923
        }
6204
8.28k
        p->mark = _mark;
6205
8.28k
        D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6206
8.28k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
6207
8.28k
    }
6208
0
    { // 'elif' named_expression ':' block else_block?
6209
8.28k
        if (p->error_indicator) {
6210
207
            p->level--;
6211
207
            return NULL;
6212
207
        }
6213
8.07k
        D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?"));
6214
8.07k
        Token * _keyword;
6215
8.07k
        Token * _literal;
6216
8.07k
        expr_ty a;
6217
8.07k
        asdl_stmt_seq* b;
6218
8.07k
        void *c;
6219
8.07k
        if (
6220
8.07k
            (_keyword = _PyPegen_expect_token(p, 692))  // token='elif'
6221
8.07k
            &&
6222
8.07k
            (a = named_expression_rule(p))  // named_expression
6223
8.07k
            &&
6224
8.07k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
6225
8.07k
            &&
6226
8.07k
            (b = block_rule(p))  // block
6227
8.07k
            &&
6228
8.07k
            (c = else_block_rule(p), !p->error_indicator)  // else_block?
6229
8.07k
        )
6230
549
        {
6231
549
            D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?"));
6232
549
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6233
549
            if (_token == NULL) {
6234
0
                p->level--;
6235
0
                return NULL;
6236
0
            }
6237
549
            int _end_lineno = _token->end_lineno;
6238
549
            UNUSED(_end_lineno); // Only used by EXTRA macro
6239
549
            int _end_col_offset = _token->end_col_offset;
6240
549
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6241
549
            _res = _PyAST_If ( a , b , c , EXTRA );
6242
549
            if (_res == NULL && PyErr_Occurred()) {
6243
0
                p->error_indicator = 1;
6244
0
                p->level--;
6245
0
                return NULL;
6246
0
            }
6247
549
            goto done;
6248
549
        }
6249
7.52k
        p->mark = _mark;
6250
7.52k
        D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6251
7.52k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block else_block?"));
6252
7.52k
    }
6253
0
    _res = NULL;
6254
8.99k
  done:
6255
8.99k
    p->level--;
6256
8.99k
    return _res;
6257
7.52k
}
6258
6259
// else_block: invalid_else_stmt | 'else' &&':' block
6260
static asdl_stmt_seq*
6261
else_block_rule(Parser *p)
6262
14.2k
{
6263
14.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
6264
0
        _Pypegen_stack_overflow(p);
6265
0
    }
6266
14.2k
    if (p->error_indicator) {
6267
0
        p->level--;
6268
0
        return NULL;
6269
0
    }
6270
14.2k
    asdl_stmt_seq* _res = NULL;
6271
14.2k
    int _mark = p->mark;
6272
14.2k
    if (p->call_invalid_rules) { // invalid_else_stmt
6273
2.57k
        if (p->error_indicator) {
6274
0
            p->level--;
6275
0
            return NULL;
6276
0
        }
6277
2.57k
        D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt"));
6278
2.57k
        void *invalid_else_stmt_var;
6279
2.57k
        if (
6280
2.57k
            (invalid_else_stmt_var = invalid_else_stmt_rule(p))  // invalid_else_stmt
6281
2.57k
        )
6282
0
        {
6283
0
            D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt"));
6284
0
            _res = invalid_else_stmt_var;
6285
0
            goto done;
6286
0
        }
6287
2.57k
        p->mark = _mark;
6288
2.57k
        D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ',
6289
2.57k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_else_stmt"));
6290
2.57k
    }
6291
14.2k
    { // 'else' &&':' block
6292
14.2k
        if (p->error_indicator) {
6293
7
            p->level--;
6294
7
            return NULL;
6295
7
        }
6296
14.1k
        D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' &&':' block"));
6297
14.1k
        Token * _keyword;
6298
14.1k
        Token * _literal;
6299
14.1k
        asdl_stmt_seq* b;
6300
14.1k
        if (
6301
14.1k
            (_keyword = _PyPegen_expect_token(p, 691))  // token='else'
6302
14.1k
            &&
6303
14.1k
            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
6304
14.1k
            &&
6305
14.1k
            (b = block_rule(p))  // block
6306
14.1k
        )
6307
1.51k
        {
6308
1.51k
            D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' &&':' block"));
6309
1.51k
            _res = b;
6310
1.51k
            if (_res == NULL && PyErr_Occurred()) {
6311
0
                p->error_indicator = 1;
6312
0
                p->level--;
6313
0
                return NULL;
6314
0
            }
6315
1.51k
            goto done;
6316
1.51k
        }
6317
12.6k
        p->mark = _mark;
6318
12.6k
        D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ',
6319
12.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' &&':' block"));
6320
12.6k
    }
6321
0
    _res = NULL;
6322
14.1k
  done:
6323
14.1k
    p->level--;
6324
14.1k
    return _res;
6325
12.6k
}
6326
6327
// while_stmt: invalid_while_stmt | 'while' named_expression ':' block else_block?
6328
static stmt_ty
6329
while_stmt_rule(Parser *p)
6330
1.22k
{
6331
1.22k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
6332
0
        _Pypegen_stack_overflow(p);
6333
0
    }
6334
1.22k
    if (p->error_indicator) {
6335
0
        p->level--;
6336
0
        return NULL;
6337
0
    }
6338
1.22k
    stmt_ty _res = NULL;
6339
1.22k
    int _mark = p->mark;
6340
1.22k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
6341
0
        p->error_indicator = 1;
6342
0
        p->level--;
6343
0
        return NULL;
6344
0
    }
6345
1.22k
    int _start_lineno = p->tokens[_mark]->lineno;
6346
1.22k
    UNUSED(_start_lineno); // Only used by EXTRA macro
6347
1.22k
    int _start_col_offset = p->tokens[_mark]->col_offset;
6348
1.22k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
6349
1.22k
    if (p->call_invalid_rules) { // invalid_while_stmt
6350
358
        if (p->error_indicator) {
6351
0
            p->level--;
6352
0
            return NULL;
6353
0
        }
6354
358
        D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt"));
6355
358
        void *invalid_while_stmt_var;
6356
358
        if (
6357
358
            (invalid_while_stmt_var = invalid_while_stmt_rule(p))  // invalid_while_stmt
6358
358
        )
6359
0
        {
6360
0
            D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt"));
6361
0
            _res = invalid_while_stmt_var;
6362
0
            goto done;
6363
0
        }
6364
358
        p->mark = _mark;
6365
358
        D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6366
358
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_while_stmt"));
6367
358
    }
6368
1.22k
    { // 'while' named_expression ':' block else_block?
6369
1.22k
        if (p->error_indicator) {
6370
7
            p->level--;
6371
7
            return NULL;
6372
7
        }
6373
1.22k
        D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?"));
6374
1.22k
        Token * _keyword;
6375
1.22k
        Token * _literal;
6376
1.22k
        expr_ty a;
6377
1.22k
        asdl_stmt_seq* b;
6378
1.22k
        void *c;
6379
1.22k
        if (
6380
1.22k
            (_keyword = _PyPegen_expect_token(p, 694))  // token='while'
6381
1.22k
            &&
6382
1.22k
            (a = named_expression_rule(p))  // named_expression
6383
1.22k
            &&
6384
1.22k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
6385
1.22k
            &&
6386
1.22k
            (b = block_rule(p))  // block
6387
1.22k
            &&
6388
1.22k
            (c = else_block_rule(p), !p->error_indicator)  // else_block?
6389
1.22k
        )
6390
1.15k
        {
6391
1.15k
            D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?"));
6392
1.15k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6393
1.15k
            if (_token == NULL) {
6394
0
                p->level--;
6395
0
                return NULL;
6396
0
            }
6397
1.15k
            int _end_lineno = _token->end_lineno;
6398
1.15k
            UNUSED(_end_lineno); // Only used by EXTRA macro
6399
1.15k
            int _end_col_offset = _token->end_col_offset;
6400
1.15k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6401
1.15k
            _res = _PyAST_While ( a , b , c , EXTRA );
6402
1.15k
            if (_res == NULL && PyErr_Occurred()) {
6403
0
                p->error_indicator = 1;
6404
0
                p->level--;
6405
0
                return NULL;
6406
0
            }
6407
1.15k
            goto done;
6408
1.15k
        }
6409
64
        p->mark = _mark;
6410
64
        D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6411
64
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' block else_block?"));
6412
64
    }
6413
0
    _res = NULL;
6414
1.22k
  done:
6415
1.22k
    p->level--;
6416
1.22k
    return _res;
6417
64
}
6418
6419
// for_stmt:
6420
//     | invalid_for_stmt
6421
//     | 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
6422
//     | 'async' 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
6423
//     | invalid_for_target
6424
static stmt_ty
6425
for_stmt_rule(Parser *p)
6426
2.08k
{
6427
2.08k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
6428
0
        _Pypegen_stack_overflow(p);
6429
0
    }
6430
2.08k
    if (p->error_indicator) {
6431
0
        p->level--;
6432
0
        return NULL;
6433
0
    }
6434
2.08k
    stmt_ty _res = NULL;
6435
2.08k
    int _mark = p->mark;
6436
2.08k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
6437
0
        p->error_indicator = 1;
6438
0
        p->level--;
6439
0
        return NULL;
6440
0
    }
6441
2.08k
    int _start_lineno = p->tokens[_mark]->lineno;
6442
2.08k
    UNUSED(_start_lineno); // Only used by EXTRA macro
6443
2.08k
    int _start_col_offset = p->tokens[_mark]->col_offset;
6444
2.08k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
6445
2.08k
    if (p->call_invalid_rules) { // invalid_for_stmt
6446
431
        if (p->error_indicator) {
6447
0
            p->level--;
6448
0
            return NULL;
6449
0
        }
6450
431
        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt"));
6451
431
        void *invalid_for_stmt_var;
6452
431
        if (
6453
431
            (invalid_for_stmt_var = invalid_for_stmt_rule(p))  // invalid_for_stmt
6454
431
        )
6455
0
        {
6456
0
            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt"));
6457
0
            _res = invalid_for_stmt_var;
6458
0
            goto done;
6459
0
        }
6460
431
        p->mark = _mark;
6461
431
        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6462
431
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_stmt"));
6463
431
    }
6464
2.08k
    { // 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
6465
2.08k
        if (p->error_indicator) {
6466
10
            p->level--;
6467
10
            return NULL;
6468
10
        }
6469
2.07k
        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
6470
2.07k
        int _cut_var = 0;
6471
2.07k
        Token * _keyword;
6472
2.07k
        Token * _keyword_1;
6473
2.07k
        Token * _literal;
6474
2.07k
        asdl_stmt_seq* b;
6475
2.07k
        void *el;
6476
2.07k
        expr_ty ex;
6477
2.07k
        expr_ty t;
6478
2.07k
        void *tc;
6479
2.07k
        if (
6480
2.07k
            (_keyword = _PyPegen_expect_token(p, 699))  // token='for'
6481
2.07k
            &&
6482
2.07k
            (t = star_targets_rule(p))  // star_targets
6483
2.07k
            &&
6484
2.07k
            (_keyword_1 = _PyPegen_expect_token(p, 700))  // token='in'
6485
2.07k
            &&
6486
2.07k
            (_cut_var = 1)
6487
2.07k
            &&
6488
2.07k
            (ex = star_expressions_rule(p))  // star_expressions
6489
2.07k
            &&
6490
2.07k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
6491
2.07k
            &&
6492
2.07k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
6493
2.07k
            &&
6494
2.07k
            (b = block_rule(p))  // block
6495
2.07k
            &&
6496
2.07k
            (el = else_block_rule(p), !p->error_indicator)  // else_block?
6497
2.07k
        )
6498
1.58k
        {
6499
1.58k
            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
6500
1.58k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6501
1.58k
            if (_token == NULL) {
6502
0
                p->level--;
6503
0
                return NULL;
6504
0
            }
6505
1.58k
            int _end_lineno = _token->end_lineno;
6506
1.58k
            UNUSED(_end_lineno); // Only used by EXTRA macro
6507
1.58k
            int _end_col_offset = _token->end_col_offset;
6508
1.58k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6509
1.58k
            _res = _PyAST_For ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
6510
1.58k
            if (_res == NULL && PyErr_Occurred()) {
6511
0
                p->error_indicator = 1;
6512
0
                p->level--;
6513
0
                return NULL;
6514
0
            }
6515
1.58k
            goto done;
6516
1.58k
        }
6517
489
        p->mark = _mark;
6518
489
        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6519
489
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
6520
489
        if (_cut_var) {
6521
60
            p->level--;
6522
60
            return NULL;
6523
60
        }
6524
489
    }
6525
429
    { // 'async' 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
6526
429
        if (p->error_indicator) {
6527
7
            p->level--;
6528
7
            return NULL;
6529
7
        }
6530
422
        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
6531
422
        int _cut_var = 0;
6532
422
        Token * _keyword;
6533
422
        Token * _keyword_1;
6534
422
        Token * _keyword_2;
6535
422
        Token * _literal;
6536
422
        asdl_stmt_seq* b;
6537
422
        void *el;
6538
422
        expr_ty ex;
6539
422
        expr_ty t;
6540
422
        void *tc;
6541
422
        if (
6542
422
            (_keyword = _PyPegen_expect_token(p, 703))  // token='async'
6543
422
            &&
6544
422
            (_keyword_1 = _PyPegen_expect_token(p, 699))  // token='for'
6545
422
            &&
6546
422
            (t = star_targets_rule(p))  // star_targets
6547
422
            &&
6548
422
            (_keyword_2 = _PyPegen_expect_token(p, 700))  // token='in'
6549
422
            &&
6550
422
            (_cut_var = 1)
6551
422
            &&
6552
422
            (ex = star_expressions_rule(p))  // star_expressions
6553
422
            &&
6554
422
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
6555
422
            &&
6556
422
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
6557
422
            &&
6558
422
            (b = block_rule(p))  // block
6559
422
            &&
6560
422
            (el = else_block_rule(p), !p->error_indicator)  // else_block?
6561
422
        )
6562
225
        {
6563
225
            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
6564
225
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6565
225
            if (_token == NULL) {
6566
0
                p->level--;
6567
0
                return NULL;
6568
0
            }
6569
225
            int _end_lineno = _token->end_lineno;
6570
225
            UNUSED(_end_lineno); // Only used by EXTRA macro
6571
225
            int _end_col_offset = _token->end_col_offset;
6572
225
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6573
225
            _res = CHECK_VERSION ( stmt_ty , 5 , "Async for loops are" , _PyAST_AsyncFor ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
6574
225
            if (_res == NULL && PyErr_Occurred()) {
6575
0
                p->error_indicator = 1;
6576
0
                p->level--;
6577
0
                return NULL;
6578
0
            }
6579
225
            goto done;
6580
225
        }
6581
197
        p->mark = _mark;
6582
197
        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6583
197
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
6584
197
        if (_cut_var) {
6585
22
            p->level--;
6586
22
            return NULL;
6587
22
        }
6588
197
    }
6589
175
    if (p->call_invalid_rules) { // invalid_for_target
6590
73
        if (p->error_indicator) {
6591
0
            p->level--;
6592
0
            return NULL;
6593
0
        }
6594
73
        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
6595
73
        void *invalid_for_target_var;
6596
73
        if (
6597
73
            (invalid_for_target_var = invalid_for_target_rule(p))  // invalid_for_target
6598
73
        )
6599
0
        {
6600
0
            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
6601
0
            _res = invalid_for_target_var;
6602
0
            goto done;
6603
0
        }
6604
73
        p->mark = _mark;
6605
73
        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6606
73
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target"));
6607
73
    }
6608
175
    _res = NULL;
6609
1.98k
  done:
6610
1.98k
    p->level--;
6611
1.98k
    return _res;
6612
175
}
6613
6614
// with_stmt:
6615
//     | invalid_with_stmt_indent
6616
//     | 'with' '(' ','.with_item+ ','? ')' ':' TYPE_COMMENT? block
6617
//     | 'with' ','.with_item+ ':' TYPE_COMMENT? block
6618
//     | 'async' 'with' '(' ','.with_item+ ','? ')' ':' block
6619
//     | 'async' 'with' ','.with_item+ ':' TYPE_COMMENT? block
6620
//     | invalid_with_stmt
6621
static stmt_ty
6622
with_stmt_rule(Parser *p)
6623
4.77k
{
6624
4.77k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
6625
0
        _Pypegen_stack_overflow(p);
6626
0
    }
6627
4.77k
    if (p->error_indicator) {
6628
0
        p->level--;
6629
0
        return NULL;
6630
0
    }
6631
4.77k
    stmt_ty _res = NULL;
6632
4.77k
    int _mark = p->mark;
6633
4.77k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
6634
0
        p->error_indicator = 1;
6635
0
        p->level--;
6636
0
        return NULL;
6637
0
    }
6638
4.77k
    int _start_lineno = p->tokens[_mark]->lineno;
6639
4.77k
    UNUSED(_start_lineno); // Only used by EXTRA macro
6640
4.77k
    int _start_col_offset = p->tokens[_mark]->col_offset;
6641
4.77k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
6642
4.77k
    if (p->call_invalid_rules) { // invalid_with_stmt_indent
6643
2.03k
        if (p->error_indicator) {
6644
0
            p->level--;
6645
0
            return NULL;
6646
0
        }
6647
2.03k
        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent"));
6648
2.03k
        void *invalid_with_stmt_indent_var;
6649
2.03k
        if (
6650
2.03k
            (invalid_with_stmt_indent_var = invalid_with_stmt_indent_rule(p))  // invalid_with_stmt_indent
6651
2.03k
        )
6652
0
        {
6653
0
            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent"));
6654
0
            _res = invalid_with_stmt_indent_var;
6655
0
            goto done;
6656
0
        }
6657
2.03k
        p->mark = _mark;
6658
2.03k
        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6659
2.03k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_stmt_indent"));
6660
2.03k
    }
6661
4.77k
    { // 'with' '(' ','.with_item+ ','? ')' ':' TYPE_COMMENT? block
6662
4.77k
        if (p->error_indicator) {
6663
41
            p->level--;
6664
41
            return NULL;
6665
41
        }
6666
4.73k
        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' TYPE_COMMENT? block"));
6667
4.73k
        Token * _keyword;
6668
4.73k
        Token * _literal;
6669
4.73k
        Token * _literal_1;
6670
4.73k
        Token * _literal_2;
6671
4.73k
        void *_opt_var;
6672
4.73k
        UNUSED(_opt_var); // Silence compiler warnings
6673
4.73k
        asdl_withitem_seq* a;
6674
4.73k
        asdl_stmt_seq* b;
6675
4.73k
        void *tc;
6676
4.73k
        if (
6677
4.73k
            (_keyword = _PyPegen_expect_token(p, 652))  // token='with'
6678
4.73k
            &&
6679
4.73k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
6680
4.73k
            &&
6681
4.73k
            (a = (asdl_withitem_seq*)_gather_34_rule(p))  // ','.with_item+
6682
4.73k
            &&
6683
4.73k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
6684
4.73k
            &&
6685
4.73k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
6686
4.73k
            &&
6687
4.73k
            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
6688
4.73k
            &&
6689
4.73k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
6690
4.73k
            &&
6691
4.73k
            (b = block_rule(p))  // block
6692
4.73k
        )
6693
1.22k
        {
6694
1.22k
            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' TYPE_COMMENT? block"));
6695
1.22k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6696
1.22k
            if (_token == NULL) {
6697
0
                p->level--;
6698
0
                return NULL;
6699
0
            }
6700
1.22k
            int _end_lineno = _token->end_lineno;
6701
1.22k
            UNUSED(_end_lineno); // Only used by EXTRA macro
6702
1.22k
            int _end_col_offset = _token->end_col_offset;
6703
1.22k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6704
1.22k
            _res = _PyAST_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
6705
1.22k
            if (_res == NULL && PyErr_Occurred()) {
6706
0
                p->error_indicator = 1;
6707
0
                p->level--;
6708
0
                return NULL;
6709
0
            }
6710
1.22k
            goto done;
6711
1.22k
        }
6712
3.51k
        p->mark = _mark;
6713
3.51k
        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6714
3.51k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' TYPE_COMMENT? block"));
6715
3.51k
    }
6716
0
    { // 'with' ','.with_item+ ':' TYPE_COMMENT? block
6717
3.51k
        if (p->error_indicator) {
6718
16
            p->level--;
6719
16
            return NULL;
6720
16
        }
6721
3.49k
        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
6722
3.49k
        Token * _keyword;
6723
3.49k
        Token * _literal;
6724
3.49k
        asdl_withitem_seq* a;
6725
3.49k
        asdl_stmt_seq* b;
6726
3.49k
        void *tc;
6727
3.49k
        if (
6728
3.49k
            (_keyword = _PyPegen_expect_token(p, 652))  // token='with'
6729
3.49k
            &&
6730
3.49k
            (a = (asdl_withitem_seq*)_gather_34_rule(p))  // ','.with_item+
6731
3.49k
            &&
6732
3.49k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
6733
3.49k
            &&
6734
3.49k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
6735
3.49k
            &&
6736
3.49k
            (b = block_rule(p))  // block
6737
3.49k
        )
6738
1.85k
        {
6739
1.85k
            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
6740
1.85k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6741
1.85k
            if (_token == NULL) {
6742
0
                p->level--;
6743
0
                return NULL;
6744
0
            }
6745
1.85k
            int _end_lineno = _token->end_lineno;
6746
1.85k
            UNUSED(_end_lineno); // Only used by EXTRA macro
6747
1.85k
            int _end_col_offset = _token->end_col_offset;
6748
1.85k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6749
1.85k
            _res = _PyAST_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
6750
1.85k
            if (_res == NULL && PyErr_Occurred()) {
6751
0
                p->error_indicator = 1;
6752
0
                p->level--;
6753
0
                return NULL;
6754
0
            }
6755
1.85k
            goto done;
6756
1.85k
        }
6757
1.64k
        p->mark = _mark;
6758
1.64k
        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6759
1.64k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
6760
1.64k
    }
6761
0
    { // 'async' 'with' '(' ','.with_item+ ','? ')' ':' block
6762
1.64k
        if (p->error_indicator) {
6763
17
            p->level--;
6764
17
            return NULL;
6765
17
        }
6766
1.62k
        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'with' '(' ','.with_item+ ','? ')' ':' block"));
6767
1.62k
        Token * _keyword;
6768
1.62k
        Token * _keyword_1;
6769
1.62k
        Token * _literal;
6770
1.62k
        Token * _literal_1;
6771
1.62k
        Token * _literal_2;
6772
1.62k
        void *_opt_var;
6773
1.62k
        UNUSED(_opt_var); // Silence compiler warnings
6774
1.62k
        asdl_withitem_seq* a;
6775
1.62k
        asdl_stmt_seq* b;
6776
1.62k
        if (
6777
1.62k
            (_keyword = _PyPegen_expect_token(p, 703))  // token='async'
6778
1.62k
            &&
6779
1.62k
            (_keyword_1 = _PyPegen_expect_token(p, 652))  // token='with'
6780
1.62k
            &&
6781
1.62k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
6782
1.62k
            &&
6783
1.62k
            (a = (asdl_withitem_seq*)_gather_34_rule(p))  // ','.with_item+
6784
1.62k
            &&
6785
1.62k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
6786
1.62k
            &&
6787
1.62k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
6788
1.62k
            &&
6789
1.62k
            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
6790
1.62k
            &&
6791
1.62k
            (b = block_rule(p))  // block
6792
1.62k
        )
6793
205
        {
6794
205
            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'with' '(' ','.with_item+ ','? ')' ':' block"));
6795
205
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6796
205
            if (_token == NULL) {
6797
0
                p->level--;
6798
0
                return NULL;
6799
0
            }
6800
205
            int _end_lineno = _token->end_lineno;
6801
205
            UNUSED(_end_lineno); // Only used by EXTRA macro
6802
205
            int _end_col_offset = _token->end_col_offset;
6803
205
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6804
205
            _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NULL , EXTRA ) );
6805
205
            if (_res == NULL && PyErr_Occurred()) {
6806
0
                p->error_indicator = 1;
6807
0
                p->level--;
6808
0
                return NULL;
6809
0
            }
6810
205
            goto done;
6811
205
        }
6812
1.42k
        p->mark = _mark;
6813
1.42k
        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6814
1.42k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'with' '(' ','.with_item+ ','? ')' ':' block"));
6815
1.42k
    }
6816
0
    { // 'async' 'with' ','.with_item+ ':' TYPE_COMMENT? block
6817
1.42k
        if (p->error_indicator) {
6818
6
            p->level--;
6819
6
            return NULL;
6820
6
        }
6821
1.41k
        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
6822
1.41k
        Token * _keyword;
6823
1.41k
        Token * _keyword_1;
6824
1.41k
        Token * _literal;
6825
1.41k
        asdl_withitem_seq* a;
6826
1.41k
        asdl_stmt_seq* b;
6827
1.41k
        void *tc;
6828
1.41k
        if (
6829
1.41k
            (_keyword = _PyPegen_expect_token(p, 703))  // token='async'
6830
1.41k
            &&
6831
1.41k
            (_keyword_1 = _PyPegen_expect_token(p, 652))  // token='with'
6832
1.41k
            &&
6833
1.41k
            (a = (asdl_withitem_seq*)_gather_34_rule(p))  // ','.with_item+
6834
1.41k
            &&
6835
1.41k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
6836
1.41k
            &&
6837
1.41k
            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
6838
1.41k
            &&
6839
1.41k
            (b = block_rule(p))  // block
6840
1.41k
        )
6841
723
        {
6842
723
            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
6843
723
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
6844
723
            if (_token == NULL) {
6845
0
                p->level--;
6846
0
                return NULL;
6847
0
            }
6848
723
            int _end_lineno = _token->end_lineno;
6849
723
            UNUSED(_end_lineno); // Only used by EXTRA macro
6850
723
            int _end_col_offset = _token->end_col_offset;
6851
723
            UNUSED(_end_col_offset); // Only used by EXTRA macro
6852
723
            _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
6853
723
            if (_res == NULL && PyErr_Occurred()) {
6854
0
                p->error_indicator = 1;
6855
0
                p->level--;
6856
0
                return NULL;
6857
0
            }
6858
723
            goto done;
6859
723
        }
6860
694
        p->mark = _mark;
6861
694
        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6862
694
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
6863
694
    }
6864
694
    if (p->call_invalid_rules) { // invalid_with_stmt
6865
276
        if (p->error_indicator) {
6866
5
            p->level--;
6867
5
            return NULL;
6868
5
        }
6869
271
        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt"));
6870
271
        void *invalid_with_stmt_var;
6871
271
        if (
6872
271
            (invalid_with_stmt_var = invalid_with_stmt_rule(p))  // invalid_with_stmt
6873
271
        )
6874
0
        {
6875
0
            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt"));
6876
0
            _res = invalid_with_stmt_var;
6877
0
            goto done;
6878
0
        }
6879
271
        p->mark = _mark;
6880
271
        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
6881
271
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_stmt"));
6882
271
    }
6883
689
    _res = NULL;
6884
4.69k
  done:
6885
4.69k
    p->level--;
6886
4.69k
    return _res;
6887
689
}
6888
6889
// with_item:
6890
//     | expression 'as' star_target &(',' | ')' | ':')
6891
//     | invalid_with_item
6892
//     | expression
6893
static withitem_ty
6894
with_item_rule(Parser *p)
6895
13.0k
{
6896
13.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
6897
0
        _Pypegen_stack_overflow(p);
6898
0
    }
6899
13.0k
    if (p->error_indicator) {
6900
0
        p->level--;
6901
0
        return NULL;
6902
0
    }
6903
13.0k
    withitem_ty _res = NULL;
6904
13.0k
    int _mark = p->mark;
6905
13.0k
    { // expression 'as' star_target &(',' | ')' | ':')
6906
13.0k
        if (p->error_indicator) {
6907
0
            p->level--;
6908
0
            return NULL;
6909
0
        }
6910
13.0k
        D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
6911
13.0k
        Token * _keyword;
6912
13.0k
        expr_ty e;
6913
13.0k
        expr_ty t;
6914
13.0k
        if (
6915
13.0k
            (e = expression_rule(p))  // expression
6916
13.0k
            &&
6917
13.0k
            (_keyword = _PyPegen_expect_token(p, 685))  // token='as'
6918
13.0k
            &&
6919
13.0k
            (t = star_target_rule(p))  // star_target
6920
13.0k
            &&
6921
13.0k
            _PyPegen_lookahead(1, _tmp_35_rule, p)
6922
13.0k
        )
6923
1.58k
        {
6924
1.58k
            D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
6925
1.58k
            _res = _PyAST_withitem ( e , t , p -> arena );
6926
1.58k
            if (_res == NULL && PyErr_Occurred()) {
6927
0
                p->error_indicator = 1;
6928
0
                p->level--;
6929
0
                return NULL;
6930
0
            }
6931
1.58k
            goto done;
6932
1.58k
        }
6933
11.5k
        p->mark = _mark;
6934
11.5k
        D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ',
6935
11.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
6936
11.5k
    }
6937
11.5k
    if (p->call_invalid_rules) { // invalid_with_item
6938
4.70k
        if (p->error_indicator) {
6939
0
            p->level--;
6940
0
            return NULL;
6941
0
        }
6942
4.70k
        D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_item"));
6943
4.70k
        void *invalid_with_item_var;
6944
4.70k
        if (
6945
4.70k
            (invalid_with_item_var = invalid_with_item_rule(p))  // invalid_with_item
6946
4.70k
        )
6947
0
        {
6948
0
            D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_item"));
6949
0
            _res = invalid_with_item_var;
6950
0
            goto done;
6951
0
        }
6952
4.70k
        p->mark = _mark;
6953
4.70k
        D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ',
6954
4.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_item"));
6955
4.70k
    }
6956
11.5k
    { // expression
6957
11.5k
        if (p->error_indicator) {
6958
19
            p->level--;
6959
19
            return NULL;
6960
19
        }
6961
11.4k
        D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
6962
11.4k
        expr_ty e;
6963
11.4k
        if (
6964
11.4k
            (e = expression_rule(p))  // expression
6965
11.4k
        )
6966
9.78k
        {
6967
9.78k
            D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
6968
9.78k
            _res = _PyAST_withitem ( e , NULL , p -> arena );
6969
9.78k
            if (_res == NULL && PyErr_Occurred()) {
6970
0
                p->error_indicator = 1;
6971
0
                p->level--;
6972
0
                return NULL;
6973
0
            }
6974
9.78k
            goto done;
6975
9.78k
        }
6976
1.70k
        p->mark = _mark;
6977
1.70k
        D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ',
6978
1.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
6979
1.70k
    }
6980
0
    _res = NULL;
6981
13.0k
  done:
6982
13.0k
    p->level--;
6983
13.0k
    return _res;
6984
1.70k
}
6985
6986
// try_stmt:
6987
//     | invalid_try_stmt
6988
//     | 'try' &&':' block finally_block
6989
//     | 'try' &&':' block except_block+ else_block? finally_block?
6990
//     | 'try' &&':' block except_star_block+ else_block? finally_block?
6991
static stmt_ty
6992
try_stmt_rule(Parser *p)
6993
5.13k
{
6994
5.13k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
6995
0
        _Pypegen_stack_overflow(p);
6996
0
    }
6997
5.13k
    if (p->error_indicator) {
6998
0
        p->level--;
6999
0
        return NULL;
7000
0
    }
7001
5.13k
    stmt_ty _res = NULL;
7002
5.13k
    int _mark = p->mark;
7003
5.13k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
7004
0
        p->error_indicator = 1;
7005
0
        p->level--;
7006
0
        return NULL;
7007
0
    }
7008
5.13k
    int _start_lineno = p->tokens[_mark]->lineno;
7009
5.13k
    UNUSED(_start_lineno); // Only used by EXTRA macro
7010
5.13k
    int _start_col_offset = p->tokens[_mark]->col_offset;
7011
5.13k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
7012
5.13k
    if (p->call_invalid_rules) { // invalid_try_stmt
7013
1.80k
        if (p->error_indicator) {
7014
0
            p->level--;
7015
0
            return NULL;
7016
0
        }
7017
1.80k
        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt"));
7018
1.80k
        void *invalid_try_stmt_var;
7019
1.80k
        if (
7020
1.80k
            (invalid_try_stmt_var = invalid_try_stmt_rule(p))  // invalid_try_stmt
7021
1.80k
        )
7022
0
        {
7023
0
            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt"));
7024
0
            _res = invalid_try_stmt_var;
7025
0
            goto done;
7026
0
        }
7027
1.80k
        p->mark = _mark;
7028
1.80k
        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
7029
1.80k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_try_stmt"));
7030
1.80k
    }
7031
5.13k
    { // 'try' &&':' block finally_block
7032
5.13k
        if (p->error_indicator) {
7033
128
            p->level--;
7034
128
            return NULL;
7035
128
        }
7036
5.00k
        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block"));
7037
5.00k
        Token * _keyword;
7038
5.00k
        Token * _literal;
7039
5.00k
        asdl_stmt_seq* b;
7040
5.00k
        asdl_stmt_seq* f;
7041
5.00k
        if (
7042
5.00k
            (_keyword = _PyPegen_expect_token(p, 661))  // token='try'
7043
5.00k
            &&
7044
5.00k
            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
7045
5.00k
            &&
7046
5.00k
            (b = block_rule(p))  // block
7047
5.00k
            &&
7048
5.00k
            (f = finally_block_rule(p))  // finally_block
7049
5.00k
        )
7050
948
        {
7051
948
            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block"));
7052
948
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7053
948
            if (_token == NULL) {
7054
0
                p->level--;
7055
0
                return NULL;
7056
0
            }
7057
948
            int _end_lineno = _token->end_lineno;
7058
948
            UNUSED(_end_lineno); // Only used by EXTRA macro
7059
948
            int _end_col_offset = _token->end_col_offset;
7060
948
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7061
948
            _res = _PyAST_Try ( b , NULL , NULL , f , EXTRA );
7062
948
            if (_res == NULL && PyErr_Occurred()) {
7063
0
                p->error_indicator = 1;
7064
0
                p->level--;
7065
0
                return NULL;
7066
0
            }
7067
948
            goto done;
7068
948
        }
7069
4.06k
        p->mark = _mark;
7070
4.06k
        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
7071
4.06k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block finally_block"));
7072
4.06k
    }
7073
0
    { // 'try' &&':' block except_block+ else_block? finally_block?
7074
4.06k
        if (p->error_indicator) {
7075
22
            p->level--;
7076
22
            return NULL;
7077
22
        }
7078
4.03k
        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?"));
7079
4.03k
        Token * _keyword;
7080
4.03k
        Token * _literal;
7081
4.03k
        asdl_stmt_seq* b;
7082
4.03k
        void *el;
7083
4.03k
        asdl_excepthandler_seq* ex;
7084
4.03k
        void *f;
7085
4.03k
        if (
7086
4.03k
            (_keyword = _PyPegen_expect_token(p, 661))  // token='try'
7087
4.03k
            &&
7088
4.03k
            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
7089
4.03k
            &&
7090
4.03k
            (b = block_rule(p))  // block
7091
4.03k
            &&
7092
4.03k
            (ex = (asdl_excepthandler_seq*)_loop1_36_rule(p))  // except_block+
7093
4.03k
            &&
7094
4.03k
            (el = else_block_rule(p), !p->error_indicator)  // else_block?
7095
4.03k
            &&
7096
4.03k
            (f = finally_block_rule(p), !p->error_indicator)  // finally_block?
7097
4.03k
        )
7098
2.64k
        {
7099
2.64k
            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?"));
7100
2.64k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7101
2.64k
            if (_token == NULL) {
7102
0
                p->level--;
7103
0
                return NULL;
7104
0
            }
7105
2.64k
            int _end_lineno = _token->end_lineno;
7106
2.64k
            UNUSED(_end_lineno); // Only used by EXTRA macro
7107
2.64k
            int _end_col_offset = _token->end_col_offset;
7108
2.64k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7109
2.64k
            _res = _PyAST_Try ( b , ex , el , f , EXTRA );
7110
2.64k
            if (_res == NULL && PyErr_Occurred()) {
7111
0
                p->error_indicator = 1;
7112
0
                p->level--;
7113
0
                return NULL;
7114
0
            }
7115
2.64k
            goto done;
7116
2.64k
        }
7117
1.39k
        p->mark = _mark;
7118
1.39k
        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
7119
1.39k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?"));
7120
1.39k
    }
7121
0
    { // 'try' &&':' block except_star_block+ else_block? finally_block?
7122
1.39k
        if (p->error_indicator) {
7123
12
            p->level--;
7124
12
            return NULL;
7125
12
        }
7126
1.37k
        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_star_block+ else_block? finally_block?"));
7127
1.37k
        Token * _keyword;
7128
1.37k
        Token * _literal;
7129
1.37k
        asdl_stmt_seq* b;
7130
1.37k
        void *el;
7131
1.37k
        asdl_excepthandler_seq* ex;
7132
1.37k
        void *f;
7133
1.37k
        if (
7134
1.37k
            (_keyword = _PyPegen_expect_token(p, 661))  // token='try'
7135
1.37k
            &&
7136
1.37k
            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
7137
1.37k
            &&
7138
1.37k
            (b = block_rule(p))  // block
7139
1.37k
            &&
7140
1.37k
            (ex = (asdl_excepthandler_seq*)_loop1_37_rule(p))  // except_star_block+
7141
1.37k
            &&
7142
1.37k
            (el = else_block_rule(p), !p->error_indicator)  // else_block?
7143
1.37k
            &&
7144
1.37k
            (f = finally_block_rule(p), !p->error_indicator)  // finally_block?
7145
1.37k
        )
7146
1.05k
        {
7147
1.05k
            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_star_block+ else_block? finally_block?"));
7148
1.05k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7149
1.05k
            if (_token == NULL) {
7150
0
                p->level--;
7151
0
                return NULL;
7152
0
            }
7153
1.05k
            int _end_lineno = _token->end_lineno;
7154
1.05k
            UNUSED(_end_lineno); // Only used by EXTRA macro
7155
1.05k
            int _end_col_offset = _token->end_col_offset;
7156
1.05k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7157
1.05k
            _res = CHECK_VERSION ( stmt_ty , 11 , "Exception groups are" , _PyAST_TryStar ( b , ex , el , f , EXTRA ) );
7158
1.05k
            if (_res == NULL && PyErr_Occurred()) {
7159
0
                p->error_indicator = 1;
7160
0
                p->level--;
7161
0
                return NULL;
7162
0
            }
7163
1.05k
            goto done;
7164
1.05k
        }
7165
325
        p->mark = _mark;
7166
325
        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
7167
325
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block except_star_block+ else_block? finally_block?"));
7168
325
    }
7169
0
    _res = NULL;
7170
4.97k
  done:
7171
4.97k
    p->level--;
7172
4.97k
    return _res;
7173
325
}
7174
7175
// except_block:
7176
//     | invalid_except_stmt_indent
7177
//     | 'except' expression ':' block
7178
//     | 'except' expression 'as' NAME ':' block
7179
//     | 'except' expressions ':' block
7180
//     | 'except' ':' block
7181
//     | invalid_except_stmt
7182
static excepthandler_ty
7183
except_block_rule(Parser *p)
7184
11.0k
{
7185
11.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
7186
0
        _Pypegen_stack_overflow(p);
7187
0
    }
7188
11.0k
    if (p->error_indicator) {
7189
0
        p->level--;
7190
0
        return NULL;
7191
0
    }
7192
11.0k
    excepthandler_ty _res = NULL;
7193
11.0k
    int _mark = p->mark;
7194
11.0k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
7195
2
        p->error_indicator = 1;
7196
2
        p->level--;
7197
2
        return NULL;
7198
2
    }
7199
10.9k
    int _start_lineno = p->tokens[_mark]->lineno;
7200
10.9k
    UNUSED(_start_lineno); // Only used by EXTRA macro
7201
10.9k
    int _start_col_offset = p->tokens[_mark]->col_offset;
7202
10.9k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
7203
10.9k
    if (p->call_invalid_rules) { // invalid_except_stmt_indent
7204
5.90k
        if (p->error_indicator) {
7205
0
            p->level--;
7206
0
            return NULL;
7207
0
        }
7208
5.90k
        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent"));
7209
5.90k
        void *invalid_except_stmt_indent_var;
7210
5.90k
        if (
7211
5.90k
            (invalid_except_stmt_indent_var = invalid_except_stmt_indent_rule(p))  // invalid_except_stmt_indent
7212
5.90k
        )
7213
0
        {
7214
0
            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent"));
7215
0
            _res = invalid_except_stmt_indent_var;
7216
0
            goto done;
7217
0
        }
7218
5.90k
        p->mark = _mark;
7219
5.90k
        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
7220
5.90k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt_indent"));
7221
5.90k
    }
7222
10.9k
    { // 'except' expression ':' block
7223
10.9k
        if (p->error_indicator) {
7224
4
            p->level--;
7225
4
            return NULL;
7226
4
        }
7227
10.9k
        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ':' block"));
7228
10.9k
        Token * _keyword;
7229
10.9k
        Token * _literal;
7230
10.9k
        asdl_stmt_seq* b;
7231
10.9k
        expr_ty e;
7232
10.9k
        if (
7233
10.9k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
7234
10.9k
            &&
7235
10.9k
            (e = expression_rule(p))  // expression
7236
10.9k
            &&
7237
10.9k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
7238
10.9k
            &&
7239
10.9k
            (b = block_rule(p))  // block
7240
10.9k
        )
7241
1.19k
        {
7242
1.19k
            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ':' block"));
7243
1.19k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7244
1.19k
            if (_token == NULL) {
7245
0
                p->level--;
7246
0
                return NULL;
7247
0
            }
7248
1.19k
            int _end_lineno = _token->end_lineno;
7249
1.19k
            UNUSED(_end_lineno); // Only used by EXTRA macro
7250
1.19k
            int _end_col_offset = _token->end_col_offset;
7251
1.19k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7252
1.19k
            _res = _PyAST_ExceptHandler ( e , NULL , b , EXTRA );
7253
1.19k
            if (_res == NULL && PyErr_Occurred()) {
7254
0
                p->error_indicator = 1;
7255
0
                p->level--;
7256
0
                return NULL;
7257
0
            }
7258
1.19k
            goto done;
7259
1.19k
        }
7260
9.80k
        p->mark = _mark;
7261
9.80k
        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
7262
9.80k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ':' block"));
7263
9.80k
    }
7264
0
    { // 'except' expression 'as' NAME ':' block
7265
9.80k
        if (p->error_indicator) {
7266
11
            p->level--;
7267
11
            return NULL;
7268
11
        }
7269
9.79k
        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression 'as' NAME ':' block"));
7270
9.79k
        Token * _keyword;
7271
9.79k
        Token * _keyword_1;
7272
9.79k
        Token * _literal;
7273
9.79k
        asdl_stmt_seq* b;
7274
9.79k
        expr_ty e;
7275
9.79k
        expr_ty t;
7276
9.79k
        if (
7277
9.79k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
7278
9.79k
            &&
7279
9.79k
            (e = expression_rule(p))  // expression
7280
9.79k
            &&
7281
9.79k
            (_keyword_1 = _PyPegen_expect_token(p, 685))  // token='as'
7282
9.79k
            &&
7283
9.79k
            (t = _PyPegen_name_token(p))  // NAME
7284
9.79k
            &&
7285
9.79k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
7286
9.79k
            &&
7287
9.79k
            (b = block_rule(p))  // block
7288
9.79k
        )
7289
364
        {
7290
364
            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression 'as' NAME ':' block"));
7291
364
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7292
364
            if (_token == NULL) {
7293
0
                p->level--;
7294
0
                return NULL;
7295
0
            }
7296
364
            int _end_lineno = _token->end_lineno;
7297
364
            UNUSED(_end_lineno); // Only used by EXTRA macro
7298
364
            int _end_col_offset = _token->end_col_offset;
7299
364
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7300
364
            _res = _PyAST_ExceptHandler ( e , ( ( expr_ty ) t ) -> v . Name . id , b , EXTRA );
7301
364
            if (_res == NULL && PyErr_Occurred()) {
7302
0
                p->error_indicator = 1;
7303
0
                p->level--;
7304
0
                return NULL;
7305
0
            }
7306
364
            goto done;
7307
364
        }
7308
9.42k
        p->mark = _mark;
7309
9.42k
        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
7310
9.42k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression 'as' NAME ':' block"));
7311
9.42k
    }
7312
0
    { // 'except' expressions ':' block
7313
9.42k
        if (p->error_indicator) {
7314
4
            p->level--;
7315
4
            return NULL;
7316
4
        }
7317
9.42k
        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expressions ':' block"));
7318
9.42k
        Token * _keyword;
7319
9.42k
        Token * _literal;
7320
9.42k
        asdl_stmt_seq* b;
7321
9.42k
        expr_ty e;
7322
9.42k
        if (
7323
9.42k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
7324
9.42k
            &&
7325
9.42k
            (e = expressions_rule(p))  // expressions
7326
9.42k
            &&
7327
9.42k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
7328
9.42k
            &&
7329
9.42k
            (b = block_rule(p))  // block
7330
9.42k
        )
7331
142
        {
7332
142
            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expressions ':' block"));
7333
142
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7334
142
            if (_token == NULL) {
7335
0
                p->level--;
7336
0
                return NULL;
7337
0
            }
7338
142
            int _end_lineno = _token->end_lineno;
7339
142
            UNUSED(_end_lineno); // Only used by EXTRA macro
7340
142
            int _end_col_offset = _token->end_col_offset;
7341
142
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7342
142
            _res = CHECK_VERSION ( excepthandler_ty , 14 , "except expressions without parentheses are" , _PyAST_ExceptHandler ( e , NULL , b , EXTRA ) );
7343
142
            if (_res == NULL && PyErr_Occurred()) {
7344
0
                p->error_indicator = 1;
7345
0
                p->level--;
7346
0
                return NULL;
7347
0
            }
7348
142
            goto done;
7349
142
        }
7350
9.28k
        p->mark = _mark;
7351
9.28k
        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
7352
9.28k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expressions ':' block"));
7353
9.28k
    }
7354
0
    { // 'except' ':' block
7355
9.28k
        if (p->error_indicator) {
7356
1
            p->level--;
7357
1
            return NULL;
7358
1
        }
7359
9.28k
        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' block"));
7360
9.28k
        Token * _keyword;
7361
9.28k
        Token * _literal;
7362
9.28k
        asdl_stmt_seq* b;
7363
9.28k
        if (
7364
9.28k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
7365
9.28k
            &&
7366
9.28k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
7367
9.28k
            &&
7368
9.28k
            (b = block_rule(p))  // block
7369
9.28k
        )
7370
3.65k
        {
7371
3.65k
            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' ':' block"));
7372
3.65k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7373
3.65k
            if (_token == NULL) {
7374
0
                p->level--;
7375
0
                return NULL;
7376
0
            }
7377
3.65k
            int _end_lineno = _token->end_lineno;
7378
3.65k
            UNUSED(_end_lineno); // Only used by EXTRA macro
7379
3.65k
            int _end_col_offset = _token->end_col_offset;
7380
3.65k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7381
3.65k
            _res = _PyAST_ExceptHandler ( NULL , NULL , b , EXTRA );
7382
3.65k
            if (_res == NULL && PyErr_Occurred()) {
7383
0
                p->error_indicator = 1;
7384
0
                p->level--;
7385
0
                return NULL;
7386
0
            }
7387
3.65k
            goto done;
7388
3.65k
        }
7389
5.63k
        p->mark = _mark;
7390
5.63k
        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
7391
5.63k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' ':' block"));
7392
5.63k
    }
7393
5.63k
    if (p->call_invalid_rules) { // invalid_except_stmt
7394
3.07k
        if (p->error_indicator) {
7395
11
            p->level--;
7396
11
            return NULL;
7397
11
        }
7398
3.05k
        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt"));
7399
3.05k
        void *invalid_except_stmt_var;
7400
3.05k
        if (
7401
3.05k
            (invalid_except_stmt_var = invalid_except_stmt_rule(p))  // invalid_except_stmt
7402
3.05k
        )
7403
0
        {
7404
0
            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt"));
7405
0
            _res = invalid_except_stmt_var;
7406
0
            goto done;
7407
0
        }
7408
3.05k
        p->mark = _mark;
7409
3.05k
        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
7410
3.05k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt"));
7411
3.05k
    }
7412
5.62k
    _res = NULL;
7413
10.9k
  done:
7414
10.9k
    p->level--;
7415
10.9k
    return _res;
7416
5.62k
}
7417
7418
// except_star_block:
7419
//     | invalid_except_star_stmt_indent
7420
//     | 'except' '*' expression ':' block
7421
//     | 'except' '*' expression 'as' NAME ':' block
7422
//     | 'except' '*' expressions ':' block
7423
//     | invalid_except_star_stmt
7424
static excepthandler_ty
7425
except_star_block_rule(Parser *p)
7426
5.44k
{
7427
5.44k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
7428
0
        _Pypegen_stack_overflow(p);
7429
0
    }
7430
5.44k
    if (p->error_indicator) {
7431
0
        p->level--;
7432
0
        return NULL;
7433
0
    }
7434
5.44k
    excepthandler_ty _res = NULL;
7435
5.44k
    int _mark = p->mark;
7436
5.44k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
7437
2
        p->error_indicator = 1;
7438
2
        p->level--;
7439
2
        return NULL;
7440
2
    }
7441
5.44k
    int _start_lineno = p->tokens[_mark]->lineno;
7442
5.44k
    UNUSED(_start_lineno); // Only used by EXTRA macro
7443
5.44k
    int _start_col_offset = p->tokens[_mark]->col_offset;
7444
5.44k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
7445
5.44k
    if (p->call_invalid_rules) { // invalid_except_star_stmt_indent
7446
3.46k
        if (p->error_indicator) {
7447
0
            p->level--;
7448
0
            return NULL;
7449
0
        }
7450
3.46k
        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_star_stmt_indent"));
7451
3.46k
        void *invalid_except_star_stmt_indent_var;
7452
3.46k
        if (
7453
3.46k
            (invalid_except_star_stmt_indent_var = invalid_except_star_stmt_indent_rule(p))  // invalid_except_star_stmt_indent
7454
3.46k
        )
7455
0
        {
7456
0
            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_star_stmt_indent"));
7457
0
            _res = invalid_except_star_stmt_indent_var;
7458
0
            goto done;
7459
0
        }
7460
3.46k
        p->mark = _mark;
7461
3.46k
        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
7462
3.46k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_star_stmt_indent"));
7463
3.46k
    }
7464
5.44k
    { // 'except' '*' expression ':' block
7465
5.44k
        if (p->error_indicator) {
7466
5
            p->level--;
7467
5
            return NULL;
7468
5
        }
7469
5.44k
        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ':' block"));
7470
5.44k
        Token * _keyword;
7471
5.44k
        Token * _literal;
7472
5.44k
        Token * _literal_1;
7473
5.44k
        asdl_stmt_seq* b;
7474
5.44k
        expr_ty e;
7475
5.44k
        if (
7476
5.44k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
7477
5.44k
            &&
7478
5.44k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
7479
5.44k
            &&
7480
5.44k
            (e = expression_rule(p))  // expression
7481
5.44k
            &&
7482
5.44k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
7483
5.44k
            &&
7484
5.44k
            (b = block_rule(p))  // block
7485
5.44k
        )
7486
2.14k
        {
7487
2.14k
            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ':' block"));
7488
2.14k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7489
2.14k
            if (_token == NULL) {
7490
0
                p->level--;
7491
0
                return NULL;
7492
0
            }
7493
2.14k
            int _end_lineno = _token->end_lineno;
7494
2.14k
            UNUSED(_end_lineno); // Only used by EXTRA macro
7495
2.14k
            int _end_col_offset = _token->end_col_offset;
7496
2.14k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7497
2.14k
            _res = _PyAST_ExceptHandler ( e , NULL , b , EXTRA );
7498
2.14k
            if (_res == NULL && PyErr_Occurred()) {
7499
0
                p->error_indicator = 1;
7500
0
                p->level--;
7501
0
                return NULL;
7502
0
            }
7503
2.14k
            goto done;
7504
2.14k
        }
7505
3.29k
        p->mark = _mark;
7506
3.29k
        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
7507
3.29k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression ':' block"));
7508
3.29k
    }
7509
0
    { // 'except' '*' expression 'as' NAME ':' block
7510
3.29k
        if (p->error_indicator) {
7511
4
            p->level--;
7512
4
            return NULL;
7513
4
        }
7514
3.28k
        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression 'as' NAME ':' block"));
7515
3.28k
        Token * _keyword;
7516
3.28k
        Token * _keyword_1;
7517
3.28k
        Token * _literal;
7518
3.28k
        Token * _literal_1;
7519
3.28k
        asdl_stmt_seq* b;
7520
3.28k
        expr_ty e;
7521
3.28k
        expr_ty t;
7522
3.28k
        if (
7523
3.28k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
7524
3.28k
            &&
7525
3.28k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
7526
3.28k
            &&
7527
3.28k
            (e = expression_rule(p))  // expression
7528
3.28k
            &&
7529
3.28k
            (_keyword_1 = _PyPegen_expect_token(p, 685))  // token='as'
7530
3.28k
            &&
7531
3.28k
            (t = _PyPegen_name_token(p))  // NAME
7532
3.28k
            &&
7533
3.28k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
7534
3.28k
            &&
7535
3.28k
            (b = block_rule(p))  // block
7536
3.28k
        )
7537
213
        {
7538
213
            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression 'as' NAME ':' block"));
7539
213
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7540
213
            if (_token == NULL) {
7541
0
                p->level--;
7542
0
                return NULL;
7543
0
            }
7544
213
            int _end_lineno = _token->end_lineno;
7545
213
            UNUSED(_end_lineno); // Only used by EXTRA macro
7546
213
            int _end_col_offset = _token->end_col_offset;
7547
213
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7548
213
            _res = _PyAST_ExceptHandler ( e , ( ( expr_ty ) t ) -> v . Name . id , b , EXTRA );
7549
213
            if (_res == NULL && PyErr_Occurred()) {
7550
0
                p->error_indicator = 1;
7551
0
                p->level--;
7552
0
                return NULL;
7553
0
            }
7554
213
            goto done;
7555
213
        }
7556
3.07k
        p->mark = _mark;
7557
3.07k
        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
7558
3.07k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression 'as' NAME ':' block"));
7559
3.07k
    }
7560
0
    { // 'except' '*' expressions ':' block
7561
3.07k
        if (p->error_indicator) {
7562
4
            p->level--;
7563
4
            return NULL;
7564
4
        }
7565
3.07k
        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expressions ':' block"));
7566
3.07k
        Token * _keyword;
7567
3.07k
        Token * _literal;
7568
3.07k
        Token * _literal_1;
7569
3.07k
        asdl_stmt_seq* b;
7570
3.07k
        expr_ty e;
7571
3.07k
        if (
7572
3.07k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
7573
3.07k
            &&
7574
3.07k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
7575
3.07k
            &&
7576
3.07k
            (e = expressions_rule(p))  // expressions
7577
3.07k
            &&
7578
3.07k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
7579
3.07k
            &&
7580
3.07k
            (b = block_rule(p))  // block
7581
3.07k
        )
7582
138
        {
7583
138
            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expressions ':' block"));
7584
138
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7585
138
            if (_token == NULL) {
7586
0
                p->level--;
7587
0
                return NULL;
7588
0
            }
7589
138
            int _end_lineno = _token->end_lineno;
7590
138
            UNUSED(_end_lineno); // Only used by EXTRA macro
7591
138
            int _end_col_offset = _token->end_col_offset;
7592
138
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7593
138
            _res = CHECK_VERSION ( excepthandler_ty , 14 , "except expressions without parentheses are" , _PyAST_ExceptHandler ( e , NULL , b , EXTRA ) );
7594
138
            if (_res == NULL && PyErr_Occurred()) {
7595
0
                p->error_indicator = 1;
7596
0
                p->level--;
7597
0
                return NULL;
7598
0
            }
7599
138
            goto done;
7600
138
        }
7601
2.93k
        p->mark = _mark;
7602
2.93k
        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
7603
2.93k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expressions ':' block"));
7604
2.93k
    }
7605
2.93k
    if (p->call_invalid_rules) { // invalid_except_star_stmt
7606
2.19k
        if (p->error_indicator) {
7607
2
            p->level--;
7608
2
            return NULL;
7609
2
        }
7610
2.18k
        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_star_stmt"));
7611
2.18k
        void *invalid_except_star_stmt_var;
7612
2.18k
        if (
7613
2.18k
            (invalid_except_star_stmt_var = invalid_except_star_stmt_rule(p))  // invalid_except_star_stmt
7614
2.18k
        )
7615
0
        {
7616
0
            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_star_stmt"));
7617
0
            _res = invalid_except_star_stmt_var;
7618
0
            goto done;
7619
0
        }
7620
2.18k
        p->mark = _mark;
7621
2.18k
        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
7622
2.18k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_star_stmt"));
7623
2.18k
    }
7624
2.93k
    _res = NULL;
7625
5.43k
  done:
7626
5.43k
    p->level--;
7627
5.43k
    return _res;
7628
2.93k
}
7629
7630
// finally_block: invalid_finally_stmt | 'finally' &&':' block
7631
static asdl_stmt_seq*
7632
finally_block_rule(Parser *p)
7633
8.56k
{
7634
8.56k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
7635
0
        _Pypegen_stack_overflow(p);
7636
0
    }
7637
8.56k
    if (p->error_indicator) {
7638
0
        p->level--;
7639
0
        return NULL;
7640
0
    }
7641
8.56k
    asdl_stmt_seq* _res = NULL;
7642
8.56k
    int _mark = p->mark;
7643
8.56k
    if (p->call_invalid_rules) { // invalid_finally_stmt
7644
2.90k
        if (p->error_indicator) {
7645
0
            p->level--;
7646
0
            return NULL;
7647
0
        }
7648
2.90k
        D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt"));
7649
2.90k
        void *invalid_finally_stmt_var;
7650
2.90k
        if (
7651
2.90k
            (invalid_finally_stmt_var = invalid_finally_stmt_rule(p))  // invalid_finally_stmt
7652
2.90k
        )
7653
0
        {
7654
0
            D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt"));
7655
0
            _res = invalid_finally_stmt_var;
7656
0
            goto done;
7657
0
        }
7658
2.90k
        p->mark = _mark;
7659
2.90k
        D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ',
7660
2.90k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_finally_stmt"));
7661
2.90k
    }
7662
8.56k
    { // 'finally' &&':' block
7663
8.56k
        if (p->error_indicator) {
7664
1
            p->level--;
7665
1
            return NULL;
7666
1
        }
7667
8.56k
        D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block"));
7668
8.56k
        Token * _keyword;
7669
8.56k
        Token * _literal;
7670
8.56k
        asdl_stmt_seq* a;
7671
8.56k
        if (
7672
8.56k
            (_keyword = _PyPegen_expect_token(p, 678))  // token='finally'
7673
8.56k
            &&
7674
8.56k
            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
7675
8.56k
            &&
7676
8.56k
            (a = block_rule(p))  // block
7677
8.56k
        )
7678
957
        {
7679
957
            D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block"));
7680
957
            _res = a;
7681
957
            if (_res == NULL && PyErr_Occurred()) {
7682
0
                p->error_indicator = 1;
7683
0
                p->level--;
7684
0
                return NULL;
7685
0
            }
7686
957
            goto done;
7687
957
        }
7688
7.60k
        p->mark = _mark;
7689
7.60k
        D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ',
7690
7.60k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' &&':' block"));
7691
7.60k
    }
7692
0
    _res = NULL;
7693
8.56k
  done:
7694
8.56k
    p->level--;
7695
8.56k
    return _res;
7696
7.60k
}
7697
7698
// match_stmt:
7699
//     | "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT
7700
//     | invalid_match_stmt
7701
static stmt_ty
7702
match_stmt_rule(Parser *p)
7703
122k
{
7704
122k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
7705
0
        _Pypegen_stack_overflow(p);
7706
0
    }
7707
122k
    if (p->error_indicator) {
7708
0
        p->level--;
7709
0
        return NULL;
7710
0
    }
7711
122k
    stmt_ty _res = NULL;
7712
122k
    int _mark = p->mark;
7713
122k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
7714
0
        p->error_indicator = 1;
7715
0
        p->level--;
7716
0
        return NULL;
7717
0
    }
7718
122k
    int _start_lineno = p->tokens[_mark]->lineno;
7719
122k
    UNUSED(_start_lineno); // Only used by EXTRA macro
7720
122k
    int _start_col_offset = p->tokens[_mark]->col_offset;
7721
122k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
7722
122k
    { // "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT
7723
122k
        if (p->error_indicator) {
7724
0
            p->level--;
7725
0
            return NULL;
7726
0
        }
7727
122k
        D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT"));
7728
122k
        expr_ty _keyword;
7729
122k
        Token * _literal;
7730
122k
        asdl_match_case_seq* cases;
7731
122k
        Token * dedent_var;
7732
122k
        Token * indent_var;
7733
122k
        Token * newline_var;
7734
122k
        expr_ty subject;
7735
122k
        if (
7736
122k
            (_keyword = _PyPegen_expect_soft_keyword(p, "match"))  // soft_keyword='"match"'
7737
122k
            &&
7738
122k
            (subject = subject_expr_rule(p))  // subject_expr
7739
122k
            &&
7740
122k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
7741
122k
            &&
7742
122k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
7743
122k
            &&
7744
122k
            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
7745
122k
            &&
7746
122k
            (cases = (asdl_match_case_seq*)_loop1_38_rule(p))  // case_block+
7747
122k
            &&
7748
122k
            (dedent_var = _PyPegen_expect_token(p, DEDENT))  // token='DEDENT'
7749
122k
        )
7750
591
        {
7751
591
            D(fprintf(stderr, "%*c+ match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT"));
7752
591
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7753
591
            if (_token == NULL) {
7754
0
                p->level--;
7755
0
                return NULL;
7756
0
            }
7757
591
            int _end_lineno = _token->end_lineno;
7758
591
            UNUSED(_end_lineno); // Only used by EXTRA macro
7759
591
            int _end_col_offset = _token->end_col_offset;
7760
591
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7761
591
            _res = CHECK_VERSION ( stmt_ty , 10 , "Pattern matching is" , _PyAST_Match ( subject , cases , EXTRA ) );
7762
591
            if (_res == NULL && PyErr_Occurred()) {
7763
0
                p->error_indicator = 1;
7764
0
                p->level--;
7765
0
                return NULL;
7766
0
            }
7767
591
            goto done;
7768
591
        }
7769
121k
        p->mark = _mark;
7770
121k
        D(fprintf(stderr, "%*c%s match_stmt[%d-%d]: %s failed!\n", p->level, ' ',
7771
121k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT"));
7772
121k
    }
7773
121k
    if (p->call_invalid_rules) { // invalid_match_stmt
7774
19.9k
        if (p->error_indicator) {
7775
118
            p->level--;
7776
118
            return NULL;
7777
118
        }
7778
19.8k
        D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_match_stmt"));
7779
19.8k
        void *invalid_match_stmt_var;
7780
19.8k
        if (
7781
19.8k
            (invalid_match_stmt_var = invalid_match_stmt_rule(p))  // invalid_match_stmt
7782
19.8k
        )
7783
0
        {
7784
0
            D(fprintf(stderr, "%*c+ match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_match_stmt"));
7785
0
            _res = invalid_match_stmt_var;
7786
0
            goto done;
7787
0
        }
7788
19.8k
        p->mark = _mark;
7789
19.8k
        D(fprintf(stderr, "%*c%s match_stmt[%d-%d]: %s failed!\n", p->level, ' ',
7790
19.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_match_stmt"));
7791
19.8k
    }
7792
121k
    _res = NULL;
7793
122k
  done:
7794
122k
    p->level--;
7795
122k
    return _res;
7796
121k
}
7797
7798
// subject_expr: star_named_expression ',' star_named_expressions? | named_expression
7799
static expr_ty
7800
subject_expr_rule(Parser *p)
7801
5.55k
{
7802
5.55k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
7803
0
        _Pypegen_stack_overflow(p);
7804
0
    }
7805
5.55k
    if (p->error_indicator) {
7806
0
        p->level--;
7807
0
        return NULL;
7808
0
    }
7809
5.55k
    expr_ty _res = NULL;
7810
5.55k
    int _mark = p->mark;
7811
5.55k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
7812
1
        p->error_indicator = 1;
7813
1
        p->level--;
7814
1
        return NULL;
7815
1
    }
7816
5.55k
    int _start_lineno = p->tokens[_mark]->lineno;
7817
5.55k
    UNUSED(_start_lineno); // Only used by EXTRA macro
7818
5.55k
    int _start_col_offset = p->tokens[_mark]->col_offset;
7819
5.55k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
7820
5.55k
    { // star_named_expression ',' star_named_expressions?
7821
5.55k
        if (p->error_indicator) {
7822
0
            p->level--;
7823
0
            return NULL;
7824
0
        }
7825
5.55k
        D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
7826
5.55k
        Token * _literal;
7827
5.55k
        expr_ty value;
7828
5.55k
        void *values;
7829
5.55k
        if (
7830
5.55k
            (value = star_named_expression_rule(p))  // star_named_expression
7831
5.55k
            &&
7832
5.55k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
7833
5.55k
            &&
7834
5.55k
            (values = star_named_expressions_rule(p), !p->error_indicator)  // star_named_expressions?
7835
5.55k
        )
7836
1.05k
        {
7837
1.05k
            D(fprintf(stderr, "%*c+ subject_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
7838
1.05k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
7839
1.05k
            if (_token == NULL) {
7840
0
                p->level--;
7841
0
                return NULL;
7842
0
            }
7843
1.05k
            int _end_lineno = _token->end_lineno;
7844
1.05k
            UNUSED(_end_lineno); // Only used by EXTRA macro
7845
1.05k
            int _end_col_offset = _token->end_col_offset;
7846
1.05k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
7847
1.05k
            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , value , values ) ) , Load , EXTRA );
7848
1.05k
            if (_res == NULL && PyErr_Occurred()) {
7849
0
                p->error_indicator = 1;
7850
0
                p->level--;
7851
0
                return NULL;
7852
0
            }
7853
1.05k
            goto done;
7854
1.05k
        }
7855
4.49k
        p->mark = _mark;
7856
4.49k
        D(fprintf(stderr, "%*c%s subject_expr[%d-%d]: %s failed!\n", p->level, ' ',
7857
4.49k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
7858
4.49k
    }
7859
0
    { // named_expression
7860
4.49k
        if (p->error_indicator) {
7861
5
            p->level--;
7862
5
            return NULL;
7863
5
        }
7864
4.49k
        D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
7865
4.49k
        expr_ty named_expression_var;
7866
4.49k
        if (
7867
4.49k
            (named_expression_var = named_expression_rule(p))  // named_expression
7868
4.49k
        )
7869
3.66k
        {
7870
3.66k
            D(fprintf(stderr, "%*c+ subject_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
7871
3.66k
            _res = named_expression_var;
7872
3.66k
            goto done;
7873
3.66k
        }
7874
829
        p->mark = _mark;
7875
829
        D(fprintf(stderr, "%*c%s subject_expr[%d-%d]: %s failed!\n", p->level, ' ',
7876
829
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
7877
829
    }
7878
0
    _res = NULL;
7879
5.55k
  done:
7880
5.55k
    p->level--;
7881
5.55k
    return _res;
7882
829
}
7883
7884
// case_block: invalid_case_block | "case" patterns guard? ':' block
7885
static match_case_ty
7886
case_block_rule(Parser *p)
7887
5.79k
{
7888
5.79k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
7889
0
        _Pypegen_stack_overflow(p);
7890
0
    }
7891
5.79k
    if (p->error_indicator) {
7892
0
        p->level--;
7893
0
        return NULL;
7894
0
    }
7895
5.79k
    match_case_ty _res = NULL;
7896
5.79k
    int _mark = p->mark;
7897
5.79k
    if (p->call_invalid_rules) { // invalid_case_block
7898
1.95k
        if (p->error_indicator) {
7899
0
            p->level--;
7900
0
            return NULL;
7901
0
        }
7902
1.95k
        D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_case_block"));
7903
1.95k
        void *invalid_case_block_var;
7904
1.95k
        if (
7905
1.95k
            (invalid_case_block_var = invalid_case_block_rule(p))  // invalid_case_block
7906
1.95k
        )
7907
0
        {
7908
0
            D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_case_block"));
7909
0
            _res = invalid_case_block_var;
7910
0
            goto done;
7911
0
        }
7912
1.95k
        p->mark = _mark;
7913
1.95k
        D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ',
7914
1.95k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_case_block"));
7915
1.95k
    }
7916
5.79k
    { // "case" patterns guard? ':' block
7917
5.79k
        if (p->error_indicator) {
7918
113
            p->level--;
7919
113
            return NULL;
7920
113
        }
7921
5.67k
        D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block"));
7922
5.67k
        expr_ty _keyword;
7923
5.67k
        Token * _literal;
7924
5.67k
        asdl_stmt_seq* body;
7925
5.67k
        void *guard;
7926
5.67k
        pattern_ty pattern;
7927
5.67k
        if (
7928
5.67k
            (_keyword = _PyPegen_expect_soft_keyword(p, "case"))  // soft_keyword='"case"'
7929
5.67k
            &&
7930
5.67k
            (pattern = patterns_rule(p))  // patterns
7931
5.67k
            &&
7932
5.67k
            (guard = guard_rule(p), !p->error_indicator)  // guard?
7933
5.67k
            &&
7934
5.67k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
7935
5.67k
            &&
7936
5.67k
            (body = block_rule(p))  // block
7937
5.67k
        )
7938
4.06k
        {
7939
4.06k
            D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block"));
7940
4.06k
            _res = _PyAST_match_case ( pattern , guard , body , p -> arena );
7941
4.06k
            if (_res == NULL && PyErr_Occurred()) {
7942
0
                p->error_indicator = 1;
7943
0
                p->level--;
7944
0
                return NULL;
7945
0
            }
7946
4.06k
            goto done;
7947
4.06k
        }
7948
1.61k
        p->mark = _mark;
7949
1.61k
        D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ',
7950
1.61k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? ':' block"));
7951
1.61k
    }
7952
0
    _res = NULL;
7953
5.67k
  done:
7954
5.67k
    p->level--;
7955
5.67k
    return _res;
7956
1.61k
}
7957
7958
// guard: 'if' named_expression
7959
static expr_ty
7960
guard_rule(Parser *p)
7961
7.32k
{
7962
7.32k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
7963
0
        _Pypegen_stack_overflow(p);
7964
0
    }
7965
7.32k
    if (p->error_indicator) {
7966
0
        p->level--;
7967
0
        return NULL;
7968
0
    }
7969
7.32k
    expr_ty _res = NULL;
7970
7.32k
    int _mark = p->mark;
7971
7.32k
    { // 'if' named_expression
7972
7.32k
        if (p->error_indicator) {
7973
0
            p->level--;
7974
0
            return NULL;
7975
0
        }
7976
7.32k
        D(fprintf(stderr, "%*c> guard[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression"));
7977
7.32k
        Token * _keyword;
7978
7.32k
        expr_ty guard;
7979
7.32k
        if (
7980
7.32k
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
7981
7.32k
            &&
7982
7.32k
            (guard = named_expression_rule(p))  // named_expression
7983
7.32k
        )
7984
263
        {
7985
263
            D(fprintf(stderr, "%*c+ guard[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression"));
7986
263
            _res = guard;
7987
263
            if (_res == NULL && PyErr_Occurred()) {
7988
0
                p->error_indicator = 1;
7989
0
                p->level--;
7990
0
                return NULL;
7991
0
            }
7992
263
            goto done;
7993
263
        }
7994
7.06k
        p->mark = _mark;
7995
7.06k
        D(fprintf(stderr, "%*c%s guard[%d-%d]: %s failed!\n", p->level, ' ',
7996
7.06k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression"));
7997
7.06k
    }
7998
0
    _res = NULL;
7999
7.32k
  done:
8000
7.32k
    p->level--;
8001
7.32k
    return _res;
8002
7.06k
}
8003
8004
// patterns: open_sequence_pattern | pattern
8005
static pattern_ty
8006
patterns_rule(Parser *p)
8007
8.51k
{
8008
8.51k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
8009
0
        _Pypegen_stack_overflow(p);
8010
0
    }
8011
8.51k
    if (p->error_indicator) {
8012
0
        p->level--;
8013
0
        return NULL;
8014
0
    }
8015
8.51k
    pattern_ty _res = NULL;
8016
8.51k
    int _mark = p->mark;
8017
8.51k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
8018
2
        p->error_indicator = 1;
8019
2
        p->level--;
8020
2
        return NULL;
8021
2
    }
8022
8.51k
    int _start_lineno = p->tokens[_mark]->lineno;
8023
8.51k
    UNUSED(_start_lineno); // Only used by EXTRA macro
8024
8.51k
    int _start_col_offset = p->tokens[_mark]->col_offset;
8025
8.51k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
8026
8.51k
    { // open_sequence_pattern
8027
8.51k
        if (p->error_indicator) {
8028
0
            p->level--;
8029
0
            return NULL;
8030
0
        }
8031
8.51k
        D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern"));
8032
8.51k
        asdl_pattern_seq* patterns;
8033
8.51k
        if (
8034
8.51k
            (patterns = (asdl_pattern_seq*)open_sequence_pattern_rule(p))  // open_sequence_pattern
8035
8.51k
        )
8036
2.47k
        {
8037
2.47k
            D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern"));
8038
2.47k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8039
2.47k
            if (_token == NULL) {
8040
0
                p->level--;
8041
0
                return NULL;
8042
0
            }
8043
2.47k
            int _end_lineno = _token->end_lineno;
8044
2.47k
            UNUSED(_end_lineno); // Only used by EXTRA macro
8045
2.47k
            int _end_col_offset = _token->end_col_offset;
8046
2.47k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8047
2.47k
            _res = _PyAST_MatchSequence ( patterns , EXTRA );
8048
2.47k
            if (_res == NULL && PyErr_Occurred()) {
8049
0
                p->error_indicator = 1;
8050
0
                p->level--;
8051
0
                return NULL;
8052
0
            }
8053
2.47k
            goto done;
8054
2.47k
        }
8055
6.03k
        p->mark = _mark;
8056
6.03k
        D(fprintf(stderr, "%*c%s patterns[%d-%d]: %s failed!\n", p->level, ' ',
8057
6.03k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "open_sequence_pattern"));
8058
6.03k
    }
8059
0
    { // pattern
8060
6.03k
        if (p->error_indicator) {
8061
228
            p->level--;
8062
228
            return NULL;
8063
228
        }
8064
5.80k
        D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern"));
8065
5.80k
        pattern_ty pattern_var;
8066
5.80k
        if (
8067
5.80k
            (pattern_var = pattern_rule(p))  // pattern
8068
5.80k
        )
8069
4.85k
        {
8070
4.85k
            D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern"));
8071
4.85k
            _res = pattern_var;
8072
4.85k
            goto done;
8073
4.85k
        }
8074
953
        p->mark = _mark;
8075
953
        D(fprintf(stderr, "%*c%s patterns[%d-%d]: %s failed!\n", p->level, ' ',
8076
953
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern"));
8077
953
    }
8078
0
    _res = NULL;
8079
8.28k
  done:
8080
8.28k
    p->level--;
8081
8.28k
    return _res;
8082
953
}
8083
8084
// pattern: as_pattern | or_pattern
8085
static pattern_ty
8086
pattern_rule(Parser *p)
8087
81.8k
{
8088
81.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
8089
0
        _Pypegen_stack_overflow(p);
8090
0
    }
8091
81.8k
    if (p->error_indicator) {
8092
0
        p->level--;
8093
0
        return NULL;
8094
0
    }
8095
81.8k
    pattern_ty _res = NULL;
8096
81.8k
    int _mark = p->mark;
8097
81.8k
    { // as_pattern
8098
81.8k
        if (p->error_indicator) {
8099
0
            p->level--;
8100
0
            return NULL;
8101
0
        }
8102
81.8k
        D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "as_pattern"));
8103
81.8k
        pattern_ty as_pattern_var;
8104
81.8k
        if (
8105
81.8k
            (as_pattern_var = as_pattern_rule(p))  // as_pattern
8106
81.8k
        )
8107
626
        {
8108
626
            D(fprintf(stderr, "%*c+ pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "as_pattern"));
8109
626
            _res = as_pattern_var;
8110
626
            goto done;
8111
626
        }
8112
81.2k
        p->mark = _mark;
8113
81.2k
        D(fprintf(stderr, "%*c%s pattern[%d-%d]: %s failed!\n", p->level, ' ',
8114
81.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "as_pattern"));
8115
81.2k
    }
8116
0
    { // or_pattern
8117
81.2k
        if (p->error_indicator) {
8118
4.09k
            p->level--;
8119
4.09k
            return NULL;
8120
4.09k
        }
8121
77.1k
        D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern"));
8122
77.1k
        pattern_ty or_pattern_var;
8123
77.1k
        if (
8124
77.1k
            (or_pattern_var = or_pattern_rule(p))  // or_pattern
8125
77.1k
        )
8126
51.3k
        {
8127
51.3k
            D(fprintf(stderr, "%*c+ pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern"));
8128
51.3k
            _res = or_pattern_var;
8129
51.3k
            goto done;
8130
51.3k
        }
8131
25.8k
        p->mark = _mark;
8132
25.8k
        D(fprintf(stderr, "%*c%s pattern[%d-%d]: %s failed!\n", p->level, ' ',
8133
25.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern"));
8134
25.8k
    }
8135
0
    _res = NULL;
8136
77.7k
  done:
8137
77.7k
    p->level--;
8138
77.7k
    return _res;
8139
25.8k
}
8140
8141
// as_pattern: or_pattern 'as' pattern_capture_target | invalid_as_pattern
8142
static pattern_ty
8143
as_pattern_rule(Parser *p)
8144
81.8k
{
8145
81.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
8146
0
        _Pypegen_stack_overflow(p);
8147
0
    }
8148
81.8k
    if (p->error_indicator) {
8149
0
        p->level--;
8150
0
        return NULL;
8151
0
    }
8152
81.8k
    pattern_ty _res = NULL;
8153
81.8k
    int _mark = p->mark;
8154
81.8k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
8155
43
        p->error_indicator = 1;
8156
43
        p->level--;
8157
43
        return NULL;
8158
43
    }
8159
81.8k
    int _start_lineno = p->tokens[_mark]->lineno;
8160
81.8k
    UNUSED(_start_lineno); // Only used by EXTRA macro
8161
81.8k
    int _start_col_offset = p->tokens[_mark]->col_offset;
8162
81.8k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
8163
81.8k
    { // or_pattern 'as' pattern_capture_target
8164
81.8k
        if (p->error_indicator) {
8165
0
            p->level--;
8166
0
            return NULL;
8167
0
        }
8168
81.8k
        D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target"));
8169
81.8k
        Token * _keyword;
8170
81.8k
        pattern_ty pattern;
8171
81.8k
        expr_ty target;
8172
81.8k
        if (
8173
81.8k
            (pattern = or_pattern_rule(p))  // or_pattern
8174
81.8k
            &&
8175
81.8k
            (_keyword = _PyPegen_expect_token(p, 685))  // token='as'
8176
81.8k
            &&
8177
81.8k
            (target = pattern_capture_target_rule(p))  // pattern_capture_target
8178
81.8k
        )
8179
626
        {
8180
626
            D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target"));
8181
626
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8182
626
            if (_token == NULL) {
8183
0
                p->level--;
8184
0
                return NULL;
8185
0
            }
8186
626
            int _end_lineno = _token->end_lineno;
8187
626
            UNUSED(_end_lineno); // Only used by EXTRA macro
8188
626
            int _end_col_offset = _token->end_col_offset;
8189
626
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8190
626
            _res = _PyAST_MatchAs ( pattern , target -> v . Name . id , EXTRA );
8191
626
            if (_res == NULL && PyErr_Occurred()) {
8192
0
                p->error_indicator = 1;
8193
0
                p->level--;
8194
0
                return NULL;
8195
0
            }
8196
626
            goto done;
8197
626
        }
8198
81.2k
        p->mark = _mark;
8199
81.2k
        D(fprintf(stderr, "%*c%s as_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8200
81.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' pattern_capture_target"));
8201
81.2k
    }
8202
81.2k
    if (p->call_invalid_rules) { // invalid_as_pattern
8203
42.7k
        if (p->error_indicator) {
8204
1.69k
            p->level--;
8205
1.69k
            return NULL;
8206
1.69k
        }
8207
41.0k
        D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_as_pattern"));
8208
41.0k
        void *invalid_as_pattern_var;
8209
41.0k
        if (
8210
41.0k
            (invalid_as_pattern_var = invalid_as_pattern_rule(p))  // invalid_as_pattern
8211
41.0k
        )
8212
0
        {
8213
0
            D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_as_pattern"));
8214
0
            _res = invalid_as_pattern_var;
8215
0
            goto done;
8216
0
        }
8217
41.0k
        p->mark = _mark;
8218
41.0k
        D(fprintf(stderr, "%*c%s as_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8219
41.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_as_pattern"));
8220
41.0k
    }
8221
79.5k
    _res = NULL;
8222
80.1k
  done:
8223
80.1k
    p->level--;
8224
80.1k
    return _res;
8225
79.5k
}
8226
8227
// or_pattern: '|'.closed_pattern+
8228
static pattern_ty
8229
or_pattern_rule(Parser *p)
8230
241k
{
8231
241k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
8232
0
        _Pypegen_stack_overflow(p);
8233
0
    }
8234
241k
    if (p->error_indicator) {
8235
0
        p->level--;
8236
0
        return NULL;
8237
0
    }
8238
241k
    pattern_ty _res = NULL;
8239
241k
    int _mark = p->mark;
8240
241k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
8241
0
        p->error_indicator = 1;
8242
0
        p->level--;
8243
0
        return NULL;
8244
0
    }
8245
241k
    int _start_lineno = p->tokens[_mark]->lineno;
8246
241k
    UNUSED(_start_lineno); // Only used by EXTRA macro
8247
241k
    int _start_col_offset = p->tokens[_mark]->col_offset;
8248
241k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
8249
241k
    { // '|'.closed_pattern+
8250
241k
        if (p->error_indicator) {
8251
0
            p->level--;
8252
0
            return NULL;
8253
0
        }
8254
241k
        D(fprintf(stderr, "%*c> or_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+"));
8255
241k
        asdl_pattern_seq* patterns;
8256
241k
        if (
8257
241k
            (patterns = (asdl_pattern_seq*)_gather_40_rule(p))  // '|'.closed_pattern+
8258
241k
        )
8259
156k
        {
8260
156k
            D(fprintf(stderr, "%*c+ or_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+"));
8261
156k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8262
156k
            if (_token == NULL) {
8263
0
                p->level--;
8264
0
                return NULL;
8265
0
            }
8266
156k
            int _end_lineno = _token->end_lineno;
8267
156k
            UNUSED(_end_lineno); // Only used by EXTRA macro
8268
156k
            int _end_col_offset = _token->end_col_offset;
8269
156k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8270
156k
            _res = asdl_seq_LEN ( patterns ) == 1 ? asdl_seq_GET ( patterns , 0 ) : _PyAST_MatchOr ( patterns , EXTRA );
8271
156k
            if (_res == NULL && PyErr_Occurred()) {
8272
0
                p->error_indicator = 1;
8273
0
                p->level--;
8274
0
                return NULL;
8275
0
            }
8276
156k
            goto done;
8277
156k
        }
8278
85.0k
        p->mark = _mark;
8279
85.0k
        D(fprintf(stderr, "%*c%s or_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8280
85.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|'.closed_pattern+"));
8281
85.0k
    }
8282
0
    _res = NULL;
8283
241k
  done:
8284
241k
    p->level--;
8285
241k
    return _res;
8286
85.0k
}
8287
8288
// closed_pattern:
8289
//     | literal_pattern
8290
//     | capture_pattern
8291
//     | wildcard_pattern
8292
//     | value_pattern
8293
//     | group_pattern
8294
//     | sequence_pattern
8295
//     | mapping_pattern
8296
//     | class_pattern
8297
static pattern_ty
8298
closed_pattern_rule(Parser *p)
8299
250k
{
8300
250k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
8301
0
        _Pypegen_stack_overflow(p);
8302
0
    }
8303
250k
    if (p->error_indicator) {
8304
0
        p->level--;
8305
0
        return NULL;
8306
0
    }
8307
250k
    pattern_ty _res = NULL;
8308
250k
    if (_PyPegen_is_memoized(p, closed_pattern_type, &_res)) {
8309
199k
        p->level--;
8310
199k
        return _res;
8311
199k
    }
8312
51.5k
    int _mark = p->mark;
8313
51.5k
    { // literal_pattern
8314
51.5k
        if (p->error_indicator) {
8315
0
            p->level--;
8316
0
            return NULL;
8317
0
        }
8318
51.5k
        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_pattern"));
8319
51.5k
        pattern_ty literal_pattern_var;
8320
51.5k
        if (
8321
51.5k
            (literal_pattern_var = literal_pattern_rule(p))  // literal_pattern
8322
51.5k
        )
8323
5.72k
        {
8324
5.72k
            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_pattern"));
8325
5.72k
            _res = literal_pattern_var;
8326
5.72k
            goto done;
8327
5.72k
        }
8328
45.8k
        p->mark = _mark;
8329
45.8k
        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8330
45.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_pattern"));
8331
45.8k
    }
8332
0
    { // capture_pattern
8333
45.8k
        if (p->error_indicator) {
8334
17
            p->level--;
8335
17
            return NULL;
8336
17
        }
8337
45.7k
        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "capture_pattern"));
8338
45.7k
        pattern_ty capture_pattern_var;
8339
45.7k
        if (
8340
45.7k
            (capture_pattern_var = capture_pattern_rule(p))  // capture_pattern
8341
45.7k
        )
8342
16.3k
        {
8343
16.3k
            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "capture_pattern"));
8344
16.3k
            _res = capture_pattern_var;
8345
16.3k
            goto done;
8346
16.3k
        }
8347
29.4k
        p->mark = _mark;
8348
29.4k
        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8349
29.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "capture_pattern"));
8350
29.4k
    }
8351
0
    { // wildcard_pattern
8352
29.4k
        if (p->error_indicator) {
8353
0
            p->level--;
8354
0
            return NULL;
8355
0
        }
8356
29.4k
        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "wildcard_pattern"));
8357
29.4k
        pattern_ty wildcard_pattern_var;
8358
29.4k
        if (
8359
29.4k
            (wildcard_pattern_var = wildcard_pattern_rule(p))  // wildcard_pattern
8360
29.4k
        )
8361
3.60k
        {
8362
3.60k
            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "wildcard_pattern"));
8363
3.60k
            _res = wildcard_pattern_var;
8364
3.60k
            goto done;
8365
3.60k
        }
8366
25.8k
        p->mark = _mark;
8367
25.8k
        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8368
25.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "wildcard_pattern"));
8369
25.8k
    }
8370
0
    { // value_pattern
8371
25.8k
        if (p->error_indicator) {
8372
0
            p->level--;
8373
0
            return NULL;
8374
0
        }
8375
25.8k
        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "value_pattern"));
8376
25.8k
        pattern_ty value_pattern_var;
8377
25.8k
        if (
8378
25.8k
            (value_pattern_var = value_pattern_rule(p))  // value_pattern
8379
25.8k
        )
8380
352
        {
8381
352
            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "value_pattern"));
8382
352
            _res = value_pattern_var;
8383
352
            goto done;
8384
352
        }
8385
25.4k
        p->mark = _mark;
8386
25.4k
        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8387
25.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "value_pattern"));
8388
25.4k
    }
8389
0
    { // group_pattern
8390
25.4k
        if (p->error_indicator) {
8391
2
            p->level--;
8392
2
            return NULL;
8393
2
        }
8394
25.4k
        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group_pattern"));
8395
25.4k
        pattern_ty group_pattern_var;
8396
25.4k
        if (
8397
25.4k
            (group_pattern_var = group_pattern_rule(p))  // group_pattern
8398
25.4k
        )
8399
563
        {
8400
563
            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group_pattern"));
8401
563
            _res = group_pattern_var;
8402
563
            goto done;
8403
563
        }
8404
24.9k
        p->mark = _mark;
8405
24.9k
        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8406
24.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group_pattern"));
8407
24.9k
    }
8408
0
    { // sequence_pattern
8409
24.9k
        if (p->error_indicator) {
8410
472
            p->level--;
8411
472
            return NULL;
8412
472
        }
8413
24.4k
        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sequence_pattern"));
8414
24.4k
        pattern_ty sequence_pattern_var;
8415
24.4k
        if (
8416
24.4k
            (sequence_pattern_var = sequence_pattern_rule(p))  // sequence_pattern
8417
24.4k
        )
8418
1.61k
        {
8419
1.61k
            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sequence_pattern"));
8420
1.61k
            _res = sequence_pattern_var;
8421
1.61k
            goto done;
8422
1.61k
        }
8423
22.8k
        p->mark = _mark;
8424
22.8k
        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8425
22.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sequence_pattern"));
8426
22.8k
    }
8427
0
    { // mapping_pattern
8428
22.8k
        if (p->error_indicator) {
8429
774
            p->level--;
8430
774
            return NULL;
8431
774
        }
8432
22.0k
        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "mapping_pattern"));
8433
22.0k
        pattern_ty mapping_pattern_var;
8434
22.0k
        if (
8435
22.0k
            (mapping_pattern_var = mapping_pattern_rule(p))  // mapping_pattern
8436
22.0k
        )
8437
2.56k
        {
8438
2.56k
            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "mapping_pattern"));
8439
2.56k
            _res = mapping_pattern_var;
8440
2.56k
            goto done;
8441
2.56k
        }
8442
19.5k
        p->mark = _mark;
8443
19.5k
        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8444
19.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "mapping_pattern"));
8445
19.5k
    }
8446
0
    { // class_pattern
8447
19.5k
        if (p->error_indicator) {
8448
565
            p->level--;
8449
565
            return NULL;
8450
565
        }
8451
18.9k
        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_pattern"));
8452
18.9k
        pattern_ty class_pattern_var;
8453
18.9k
        if (
8454
18.9k
            (class_pattern_var = class_pattern_rule(p))  // class_pattern
8455
18.9k
        )
8456
2.77k
        {
8457
2.77k
            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "class_pattern"));
8458
2.77k
            _res = class_pattern_var;
8459
2.77k
            goto done;
8460
2.77k
        }
8461
16.1k
        p->mark = _mark;
8462
16.1k
        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8463
16.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "class_pattern"));
8464
16.1k
    }
8465
0
    _res = NULL;
8466
49.7k
  done:
8467
49.7k
    _PyPegen_insert_memo(p, _mark, closed_pattern_type, _res);
8468
49.7k
    p->level--;
8469
49.7k
    return _res;
8470
16.1k
}
8471
8472
// literal_pattern:
8473
//     | signed_number !('+' | '-')
8474
//     | complex_number
8475
//     | strings
8476
//     | 'None'
8477
//     | 'True'
8478
//     | 'False'
8479
static pattern_ty
8480
literal_pattern_rule(Parser *p)
8481
51.5k
{
8482
51.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
8483
0
        _Pypegen_stack_overflow(p);
8484
0
    }
8485
51.5k
    if (p->error_indicator) {
8486
0
        p->level--;
8487
0
        return NULL;
8488
0
    }
8489
51.5k
    pattern_ty _res = NULL;
8490
51.5k
    int _mark = p->mark;
8491
51.5k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
8492
0
        p->error_indicator = 1;
8493
0
        p->level--;
8494
0
        return NULL;
8495
0
    }
8496
51.5k
    int _start_lineno = p->tokens[_mark]->lineno;
8497
51.5k
    UNUSED(_start_lineno); // Only used by EXTRA macro
8498
51.5k
    int _start_col_offset = p->tokens[_mark]->col_offset;
8499
51.5k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
8500
51.5k
    { // signed_number !('+' | '-')
8501
51.5k
        if (p->error_indicator) {
8502
0
            p->level--;
8503
0
            return NULL;
8504
0
        }
8505
51.5k
        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
8506
51.5k
        expr_ty value;
8507
51.5k
        if (
8508
51.5k
            (value = signed_number_rule(p))  // signed_number
8509
51.5k
            &&
8510
51.5k
            _PyPegen_lookahead(0, _tmp_41_rule, p)
8511
51.5k
        )
8512
4.38k
        {
8513
4.38k
            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
8514
4.38k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8515
4.38k
            if (_token == NULL) {
8516
0
                p->level--;
8517
0
                return NULL;
8518
0
            }
8519
4.38k
            int _end_lineno = _token->end_lineno;
8520
4.38k
            UNUSED(_end_lineno); // Only used by EXTRA macro
8521
4.38k
            int _end_col_offset = _token->end_col_offset;
8522
4.38k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8523
4.38k
            _res = _PyAST_MatchValue ( value , EXTRA );
8524
4.38k
            if (_res == NULL && PyErr_Occurred()) {
8525
0
                p->error_indicator = 1;
8526
0
                p->level--;
8527
0
                return NULL;
8528
0
            }
8529
4.38k
            goto done;
8530
4.38k
        }
8531
47.1k
        p->mark = _mark;
8532
47.1k
        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8533
47.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')"));
8534
47.1k
    }
8535
0
    { // complex_number
8536
47.1k
        if (p->error_indicator) {
8537
1
            p->level--;
8538
1
            return NULL;
8539
1
        }
8540
47.1k
        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number"));
8541
47.1k
        expr_ty value;
8542
47.1k
        if (
8543
47.1k
            (value = complex_number_rule(p))  // complex_number
8544
47.1k
        )
8545
499
        {
8546
499
            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number"));
8547
499
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8548
499
            if (_token == NULL) {
8549
0
                p->level--;
8550
0
                return NULL;
8551
0
            }
8552
499
            int _end_lineno = _token->end_lineno;
8553
499
            UNUSED(_end_lineno); // Only used by EXTRA macro
8554
499
            int _end_col_offset = _token->end_col_offset;
8555
499
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8556
499
            _res = _PyAST_MatchValue ( value , EXTRA );
8557
499
            if (_res == NULL && PyErr_Occurred()) {
8558
0
                p->error_indicator = 1;
8559
0
                p->level--;
8560
0
                return NULL;
8561
0
            }
8562
499
            goto done;
8563
499
        }
8564
46.6k
        p->mark = _mark;
8565
46.6k
        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8566
46.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number"));
8567
46.6k
    }
8568
0
    { // strings
8569
46.6k
        if (p->error_indicator) {
8570
10
            p->level--;
8571
10
            return NULL;
8572
10
        }
8573
46.6k
        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings"));
8574
46.6k
        expr_ty value;
8575
46.6k
        if (
8576
46.6k
            (value = strings_rule(p))  // strings
8577
46.6k
        )
8578
216
        {
8579
216
            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "strings"));
8580
216
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8581
216
            if (_token == NULL) {
8582
0
                p->level--;
8583
0
                return NULL;
8584
0
            }
8585
216
            int _end_lineno = _token->end_lineno;
8586
216
            UNUSED(_end_lineno); // Only used by EXTRA macro
8587
216
            int _end_col_offset = _token->end_col_offset;
8588
216
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8589
216
            _res = _PyAST_MatchValue ( value , EXTRA );
8590
216
            if (_res == NULL && PyErr_Occurred()) {
8591
0
                p->error_indicator = 1;
8592
0
                p->level--;
8593
0
                return NULL;
8594
0
            }
8595
216
            goto done;
8596
216
        }
8597
46.4k
        p->mark = _mark;
8598
46.4k
        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8599
46.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "strings"));
8600
46.4k
    }
8601
0
    { // 'None'
8602
46.4k
        if (p->error_indicator) {
8603
6
            p->level--;
8604
6
            return NULL;
8605
6
        }
8606
46.4k
        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
8607
46.4k
        Token * _keyword;
8608
46.4k
        if (
8609
46.4k
            (_keyword = _PyPegen_expect_token(p, 624))  // token='None'
8610
46.4k
        )
8611
264
        {
8612
264
            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
8613
264
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8614
264
            if (_token == NULL) {
8615
0
                p->level--;
8616
0
                return NULL;
8617
0
            }
8618
264
            int _end_lineno = _token->end_lineno;
8619
264
            UNUSED(_end_lineno); // Only used by EXTRA macro
8620
264
            int _end_col_offset = _token->end_col_offset;
8621
264
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8622
264
            _res = _PyAST_MatchSingleton ( Py_None , EXTRA );
8623
264
            if (_res == NULL && PyErr_Occurred()) {
8624
0
                p->error_indicator = 1;
8625
0
                p->level--;
8626
0
                return NULL;
8627
0
            }
8628
264
            goto done;
8629
264
        }
8630
46.1k
        p->mark = _mark;
8631
46.1k
        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8632
46.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
8633
46.1k
    }
8634
0
    { // 'True'
8635
46.1k
        if (p->error_indicator) {
8636
0
            p->level--;
8637
0
            return NULL;
8638
0
        }
8639
46.1k
        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
8640
46.1k
        Token * _keyword;
8641
46.1k
        if (
8642
46.1k
            (_keyword = _PyPegen_expect_token(p, 623))  // token='True'
8643
46.1k
        )
8644
78
        {
8645
78
            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
8646
78
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8647
78
            if (_token == NULL) {
8648
0
                p->level--;
8649
0
                return NULL;
8650
0
            }
8651
78
            int _end_lineno = _token->end_lineno;
8652
78
            UNUSED(_end_lineno); // Only used by EXTRA macro
8653
78
            int _end_col_offset = _token->end_col_offset;
8654
78
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8655
78
            _res = _PyAST_MatchSingleton ( Py_True , EXTRA );
8656
78
            if (_res == NULL && PyErr_Occurred()) {
8657
0
                p->error_indicator = 1;
8658
0
                p->level--;
8659
0
                return NULL;
8660
0
            }
8661
78
            goto done;
8662
78
        }
8663
46.0k
        p->mark = _mark;
8664
46.0k
        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8665
46.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
8666
46.0k
    }
8667
0
    { // 'False'
8668
46.0k
        if (p->error_indicator) {
8669
0
            p->level--;
8670
0
            return NULL;
8671
0
        }
8672
46.0k
        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
8673
46.0k
        Token * _keyword;
8674
46.0k
        if (
8675
46.0k
            (_keyword = _PyPegen_expect_token(p, 625))  // token='False'
8676
46.0k
        )
8677
290
        {
8678
290
            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
8679
290
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8680
290
            if (_token == NULL) {
8681
0
                p->level--;
8682
0
                return NULL;
8683
0
            }
8684
290
            int _end_lineno = _token->end_lineno;
8685
290
            UNUSED(_end_lineno); // Only used by EXTRA macro
8686
290
            int _end_col_offset = _token->end_col_offset;
8687
290
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8688
290
            _res = _PyAST_MatchSingleton ( Py_False , EXTRA );
8689
290
            if (_res == NULL && PyErr_Occurred()) {
8690
0
                p->error_indicator = 1;
8691
0
                p->level--;
8692
0
                return NULL;
8693
0
            }
8694
290
            goto done;
8695
290
        }
8696
45.7k
        p->mark = _mark;
8697
45.7k
        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
8698
45.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
8699
45.7k
    }
8700
0
    _res = NULL;
8701
51.5k
  done:
8702
51.5k
    p->level--;
8703
51.5k
    return _res;
8704
45.7k
}
8705
8706
// literal_expr:
8707
//     | signed_number !('+' | '-')
8708
//     | complex_number
8709
//     | &(STRING | FSTRING_START | TSTRING_START) strings
8710
//     | 'None'
8711
//     | 'True'
8712
//     | 'False'
8713
static expr_ty
8714
literal_expr_rule(Parser *p)
8715
9.04k
{
8716
9.04k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
8717
0
        _Pypegen_stack_overflow(p);
8718
0
    }
8719
9.04k
    if (p->error_indicator) {
8720
0
        p->level--;
8721
0
        return NULL;
8722
0
    }
8723
9.04k
    expr_ty _res = NULL;
8724
9.04k
    int _mark = p->mark;
8725
9.04k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
8726
9
        p->error_indicator = 1;
8727
9
        p->level--;
8728
9
        return NULL;
8729
9
    }
8730
9.03k
    int _start_lineno = p->tokens[_mark]->lineno;
8731
9.03k
    UNUSED(_start_lineno); // Only used by EXTRA macro
8732
9.03k
    int _start_col_offset = p->tokens[_mark]->col_offset;
8733
9.03k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
8734
9.03k
    { // signed_number !('+' | '-')
8735
9.03k
        if (p->error_indicator) {
8736
0
            p->level--;
8737
0
            return NULL;
8738
0
        }
8739
9.03k
        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
8740
9.03k
        expr_ty signed_number_var;
8741
9.03k
        if (
8742
9.03k
            (signed_number_var = signed_number_rule(p))  // signed_number
8743
9.03k
            &&
8744
9.03k
            _PyPegen_lookahead(0, _tmp_41_rule, p)
8745
9.03k
        )
8746
4.32k
        {
8747
4.32k
            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
8748
4.32k
            _res = signed_number_var;
8749
4.32k
            goto done;
8750
4.32k
        }
8751
4.70k
        p->mark = _mark;
8752
4.70k
        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
8753
4.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')"));
8754
4.70k
    }
8755
0
    { // complex_number
8756
4.70k
        if (p->error_indicator) {
8757
2
            p->level--;
8758
2
            return NULL;
8759
2
        }
8760
4.70k
        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number"));
8761
4.70k
        expr_ty complex_number_var;
8762
4.70k
        if (
8763
4.70k
            (complex_number_var = complex_number_rule(p))  // complex_number
8764
4.70k
        )
8765
579
        {
8766
579
            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number"));
8767
579
            _res = complex_number_var;
8768
579
            goto done;
8769
579
        }
8770
4.12k
        p->mark = _mark;
8771
4.12k
        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
8772
4.12k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number"));
8773
4.12k
    }
8774
0
    { // &(STRING | FSTRING_START | TSTRING_START) strings
8775
4.12k
        if (p->error_indicator) {
8776
6
            p->level--;
8777
6
            return NULL;
8778
6
        }
8779
4.12k
        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
8780
4.12k
        expr_ty strings_var;
8781
4.12k
        if (
8782
4.12k
            _PyPegen_lookahead(1, _tmp_42_rule, p)
8783
4.12k
            &&
8784
4.12k
            (strings_var = strings_rule(p))  // strings
8785
4.12k
        )
8786
3.23k
        {
8787
3.23k
            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
8788
3.23k
            _res = strings_var;
8789
3.23k
            goto done;
8790
3.23k
        }
8791
884
        p->mark = _mark;
8792
884
        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
8793
884
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
8794
884
    }
8795
0
    { // 'None'
8796
884
        if (p->error_indicator) {
8797
4
            p->level--;
8798
4
            return NULL;
8799
4
        }
8800
880
        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
8801
880
        Token * _keyword;
8802
880
        if (
8803
880
            (_keyword = _PyPegen_expect_token(p, 624))  // token='None'
8804
880
        )
8805
7
        {
8806
7
            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
8807
7
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8808
7
            if (_token == NULL) {
8809
0
                p->level--;
8810
0
                return NULL;
8811
0
            }
8812
7
            int _end_lineno = _token->end_lineno;
8813
7
            UNUSED(_end_lineno); // Only used by EXTRA macro
8814
7
            int _end_col_offset = _token->end_col_offset;
8815
7
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8816
7
            _res = _PyAST_Constant ( Py_None , NULL , EXTRA );
8817
7
            if (_res == NULL && PyErr_Occurred()) {
8818
0
                p->error_indicator = 1;
8819
0
                p->level--;
8820
0
                return NULL;
8821
0
            }
8822
7
            goto done;
8823
7
        }
8824
873
        p->mark = _mark;
8825
873
        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
8826
873
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
8827
873
    }
8828
0
    { // 'True'
8829
873
        if (p->error_indicator) {
8830
0
            p->level--;
8831
0
            return NULL;
8832
0
        }
8833
873
        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
8834
873
        Token * _keyword;
8835
873
        if (
8836
873
            (_keyword = _PyPegen_expect_token(p, 623))  // token='True'
8837
873
        )
8838
66
        {
8839
66
            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
8840
66
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8841
66
            if (_token == NULL) {
8842
0
                p->level--;
8843
0
                return NULL;
8844
0
            }
8845
66
            int _end_lineno = _token->end_lineno;
8846
66
            UNUSED(_end_lineno); // Only used by EXTRA macro
8847
66
            int _end_col_offset = _token->end_col_offset;
8848
66
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8849
66
            _res = _PyAST_Constant ( Py_True , NULL , EXTRA );
8850
66
            if (_res == NULL && PyErr_Occurred()) {
8851
0
                p->error_indicator = 1;
8852
0
                p->level--;
8853
0
                return NULL;
8854
0
            }
8855
66
            goto done;
8856
66
        }
8857
807
        p->mark = _mark;
8858
807
        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
8859
807
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
8860
807
    }
8861
0
    { // 'False'
8862
807
        if (p->error_indicator) {
8863
0
            p->level--;
8864
0
            return NULL;
8865
0
        }
8866
807
        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
8867
807
        Token * _keyword;
8868
807
        if (
8869
807
            (_keyword = _PyPegen_expect_token(p, 625))  // token='False'
8870
807
        )
8871
7
        {
8872
7
            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
8873
7
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8874
7
            if (_token == NULL) {
8875
0
                p->level--;
8876
0
                return NULL;
8877
0
            }
8878
7
            int _end_lineno = _token->end_lineno;
8879
7
            UNUSED(_end_lineno); // Only used by EXTRA macro
8880
7
            int _end_col_offset = _token->end_col_offset;
8881
7
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8882
7
            _res = _PyAST_Constant ( Py_False , NULL , EXTRA );
8883
7
            if (_res == NULL && PyErr_Occurred()) {
8884
0
                p->error_indicator = 1;
8885
0
                p->level--;
8886
0
                return NULL;
8887
0
            }
8888
7
            goto done;
8889
7
        }
8890
800
        p->mark = _mark;
8891
800
        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
8892
800
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
8893
800
    }
8894
0
    _res = NULL;
8895
9.02k
  done:
8896
9.02k
    p->level--;
8897
9.02k
    return _res;
8898
800
}
8899
8900
// complex_number:
8901
//     | signed_real_number '+' imaginary_number
8902
//     | signed_real_number '-' imaginary_number
8903
static expr_ty
8904
complex_number_rule(Parser *p)
8905
51.8k
{
8906
51.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
8907
0
        _Pypegen_stack_overflow(p);
8908
0
    }
8909
51.8k
    if (p->error_indicator) {
8910
0
        p->level--;
8911
0
        return NULL;
8912
0
    }
8913
51.8k
    expr_ty _res = NULL;
8914
51.8k
    int _mark = p->mark;
8915
51.8k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
8916
0
        p->error_indicator = 1;
8917
0
        p->level--;
8918
0
        return NULL;
8919
0
    }
8920
51.8k
    int _start_lineno = p->tokens[_mark]->lineno;
8921
51.8k
    UNUSED(_start_lineno); // Only used by EXTRA macro
8922
51.8k
    int _start_col_offset = p->tokens[_mark]->col_offset;
8923
51.8k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
8924
51.8k
    { // signed_real_number '+' imaginary_number
8925
51.8k
        if (p->error_indicator) {
8926
0
            p->level--;
8927
0
            return NULL;
8928
0
        }
8929
51.8k
        D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number"));
8930
51.8k
        Token * _literal;
8931
51.8k
        expr_ty imag;
8932
51.8k
        expr_ty real;
8933
51.8k
        if (
8934
51.8k
            (real = signed_real_number_rule(p))  // signed_real_number
8935
51.8k
            &&
8936
51.8k
            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
8937
51.8k
            &&
8938
51.8k
            (imag = imaginary_number_rule(p))  // imaginary_number
8939
51.8k
        )
8940
364
        {
8941
364
            D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number"));
8942
364
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8943
364
            if (_token == NULL) {
8944
0
                p->level--;
8945
0
                return NULL;
8946
0
            }
8947
364
            int _end_lineno = _token->end_lineno;
8948
364
            UNUSED(_end_lineno); // Only used by EXTRA macro
8949
364
            int _end_col_offset = _token->end_col_offset;
8950
364
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8951
364
            _res = _PyAST_BinOp ( real , Add , imag , EXTRA );
8952
364
            if (_res == NULL && PyErr_Occurred()) {
8953
0
                p->error_indicator = 1;
8954
0
                p->level--;
8955
0
                return NULL;
8956
0
            }
8957
364
            goto done;
8958
364
        }
8959
51.4k
        p->mark = _mark;
8960
51.4k
        D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ',
8961
51.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '+' imaginary_number"));
8962
51.4k
    }
8963
0
    { // signed_real_number '-' imaginary_number
8964
51.4k
        if (p->error_indicator) {
8965
9
            p->level--;
8966
9
            return NULL;
8967
9
        }
8968
51.4k
        D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number"));
8969
51.4k
        Token * _literal;
8970
51.4k
        expr_ty imag;
8971
51.4k
        expr_ty real;
8972
51.4k
        if (
8973
51.4k
            (real = signed_real_number_rule(p))  // signed_real_number
8974
51.4k
            &&
8975
51.4k
            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
8976
51.4k
            &&
8977
51.4k
            (imag = imaginary_number_rule(p))  // imaginary_number
8978
51.4k
        )
8979
714
        {
8980
714
            D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number"));
8981
714
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
8982
714
            if (_token == NULL) {
8983
0
                p->level--;
8984
0
                return NULL;
8985
0
            }
8986
714
            int _end_lineno = _token->end_lineno;
8987
714
            UNUSED(_end_lineno); // Only used by EXTRA macro
8988
714
            int _end_col_offset = _token->end_col_offset;
8989
714
            UNUSED(_end_col_offset); // Only used by EXTRA macro
8990
714
            _res = _PyAST_BinOp ( real , Sub , imag , EXTRA );
8991
714
            if (_res == NULL && PyErr_Occurred()) {
8992
0
                p->error_indicator = 1;
8993
0
                p->level--;
8994
0
                return NULL;
8995
0
            }
8996
714
            goto done;
8997
714
        }
8998
50.7k
        p->mark = _mark;
8999
50.7k
        D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ',
9000
50.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '-' imaginary_number"));
9001
50.7k
    }
9002
0
    _res = NULL;
9003
51.8k
  done:
9004
51.8k
    p->level--;
9005
51.8k
    return _res;
9006
50.7k
}
9007
9008
// signed_number: NUMBER | '-' NUMBER
9009
static expr_ty
9010
signed_number_rule(Parser *p)
9011
60.5k
{
9012
60.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9013
0
        _Pypegen_stack_overflow(p);
9014
0
    }
9015
60.5k
    if (p->error_indicator) {
9016
0
        p->level--;
9017
0
        return NULL;
9018
0
    }
9019
60.5k
    expr_ty _res = NULL;
9020
60.5k
    int _mark = p->mark;
9021
60.5k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
9022
0
        p->error_indicator = 1;
9023
0
        p->level--;
9024
0
        return NULL;
9025
0
    }
9026
60.5k
    int _start_lineno = p->tokens[_mark]->lineno;
9027
60.5k
    UNUSED(_start_lineno); // Only used by EXTRA macro
9028
60.5k
    int _start_col_offset = p->tokens[_mark]->col_offset;
9029
60.5k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
9030
60.5k
    { // NUMBER
9031
60.5k
        if (p->error_indicator) {
9032
0
            p->level--;
9033
0
            return NULL;
9034
0
        }
9035
60.5k
        D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
9036
60.5k
        expr_ty number_var;
9037
60.5k
        if (
9038
60.5k
            (number_var = _PyPegen_number_token(p))  // NUMBER
9039
60.5k
        )
9040
8.32k
        {
9041
8.32k
            D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER"));
9042
8.32k
            _res = number_var;
9043
8.32k
            goto done;
9044
8.32k
        }
9045
52.2k
        p->mark = _mark;
9046
52.2k
        D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ',
9047
52.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER"));
9048
52.2k
    }
9049
0
    { // '-' NUMBER
9050
52.2k
        if (p->error_indicator) {
9051
0
            p->level--;
9052
0
            return NULL;
9053
0
        }
9054
52.2k
        D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' NUMBER"));
9055
52.2k
        Token * _literal;
9056
52.2k
        expr_ty number;
9057
52.2k
        if (
9058
52.2k
            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
9059
52.2k
            &&
9060
52.2k
            (number = _PyPegen_number_token(p))  // NUMBER
9061
52.2k
        )
9062
1.50k
        {
9063
1.50k
            D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' NUMBER"));
9064
1.50k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
9065
1.50k
            if (_token == NULL) {
9066
0
                p->level--;
9067
0
                return NULL;
9068
0
            }
9069
1.50k
            int _end_lineno = _token->end_lineno;
9070
1.50k
            UNUSED(_end_lineno); // Only used by EXTRA macro
9071
1.50k
            int _end_col_offset = _token->end_col_offset;
9072
1.50k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
9073
1.50k
            _res = _PyAST_UnaryOp ( USub , number , EXTRA );
9074
1.50k
            if (_res == NULL && PyErr_Occurred()) {
9075
0
                p->error_indicator = 1;
9076
0
                p->level--;
9077
0
                return NULL;
9078
0
            }
9079
1.50k
            goto done;
9080
1.50k
        }
9081
50.7k
        p->mark = _mark;
9082
50.7k
        D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ',
9083
50.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' NUMBER"));
9084
50.7k
    }
9085
0
    _res = NULL;
9086
60.5k
  done:
9087
60.5k
    p->level--;
9088
60.5k
    return _res;
9089
50.7k
}
9090
9091
// signed_real_number: real_number | '-' real_number
9092
static expr_ty
9093
signed_real_number_rule(Parser *p)
9094
103k
{
9095
103k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9096
0
        _Pypegen_stack_overflow(p);
9097
0
    }
9098
103k
    if (p->error_indicator) {
9099
0
        p->level--;
9100
0
        return NULL;
9101
0
    }
9102
103k
    expr_ty _res = NULL;
9103
103k
    int _mark = p->mark;
9104
103k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
9105
0
        p->error_indicator = 1;
9106
0
        p->level--;
9107
0
        return NULL;
9108
0
    }
9109
103k
    int _start_lineno = p->tokens[_mark]->lineno;
9110
103k
    UNUSED(_start_lineno); // Only used by EXTRA macro
9111
103k
    int _start_col_offset = p->tokens[_mark]->col_offset;
9112
103k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
9113
103k
    { // real_number
9114
103k
        if (p->error_indicator) {
9115
0
            p->level--;
9116
0
            return NULL;
9117
0
        }
9118
103k
        D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "real_number"));
9119
103k
        expr_ty real_number_var;
9120
103k
        if (
9121
103k
            (real_number_var = real_number_rule(p))  // real_number
9122
103k
        )
9123
1.28k
        {
9124
1.28k
            D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "real_number"));
9125
1.28k
            _res = real_number_var;
9126
1.28k
            goto done;
9127
1.28k
        }
9128
102k
        p->mark = _mark;
9129
102k
        D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ',
9130
102k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "real_number"));
9131
102k
    }
9132
0
    { // '-' real_number
9133
102k
        if (p->error_indicator) {
9134
1
            p->level--;
9135
1
            return NULL;
9136
1
        }
9137
102k
        D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' real_number"));
9138
102k
        Token * _literal;
9139
102k
        expr_ty real;
9140
102k
        if (
9141
102k
            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
9142
102k
            &&
9143
102k
            (real = real_number_rule(p))  // real_number
9144
102k
        )
9145
579
        {
9146
579
            D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' real_number"));
9147
579
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
9148
579
            if (_token == NULL) {
9149
0
                p->level--;
9150
0
                return NULL;
9151
0
            }
9152
579
            int _end_lineno = _token->end_lineno;
9153
579
            UNUSED(_end_lineno); // Only used by EXTRA macro
9154
579
            int _end_col_offset = _token->end_col_offset;
9155
579
            UNUSED(_end_col_offset); // Only used by EXTRA macro
9156
579
            _res = _PyAST_UnaryOp ( USub , real , EXTRA );
9157
579
            if (_res == NULL && PyErr_Occurred()) {
9158
0
                p->error_indicator = 1;
9159
0
                p->level--;
9160
0
                return NULL;
9161
0
            }
9162
579
            goto done;
9163
579
        }
9164
101k
        p->mark = _mark;
9165
101k
        D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ',
9166
101k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' real_number"));
9167
101k
    }
9168
0
    _res = NULL;
9169
103k
  done:
9170
103k
    p->level--;
9171
103k
    return _res;
9172
101k
}
9173
9174
// real_number: NUMBER
9175
static expr_ty
9176
real_number_rule(Parser *p)
9177
103k
{
9178
103k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9179
0
        _Pypegen_stack_overflow(p);
9180
0
    }
9181
103k
    if (p->error_indicator) {
9182
0
        p->level--;
9183
0
        return NULL;
9184
0
    }
9185
103k
    expr_ty _res = NULL;
9186
103k
    int _mark = p->mark;
9187
103k
    { // NUMBER
9188
103k
        if (p->error_indicator) {
9189
0
            p->level--;
9190
0
            return NULL;
9191
0
        }
9192
103k
        D(fprintf(stderr, "%*c> real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
9193
103k
        expr_ty real;
9194
103k
        if (
9195
103k
            (real = _PyPegen_number_token(p))  // NUMBER
9196
103k
        )
9197
1.86k
        {
9198
1.86k
            D(fprintf(stderr, "%*c+ real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER"));
9199
1.86k
            _res = _PyPegen_ensure_real ( p , real );
9200
1.86k
            if (_res == NULL && PyErr_Occurred()) {
9201
3
                p->error_indicator = 1;
9202
3
                p->level--;
9203
3
                return NULL;
9204
3
            }
9205
1.86k
            goto done;
9206
1.86k
        }
9207
102k
        p->mark = _mark;
9208
102k
        D(fprintf(stderr, "%*c%s real_number[%d-%d]: %s failed!\n", p->level, ' ',
9209
102k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER"));
9210
102k
    }
9211
0
    _res = NULL;
9212
103k
  done:
9213
103k
    p->level--;
9214
103k
    return _res;
9215
102k
}
9216
9217
// imaginary_number: NUMBER
9218
static expr_ty
9219
imaginary_number_rule(Parser *p)
9220
1.11k
{
9221
1.11k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9222
0
        _Pypegen_stack_overflow(p);
9223
0
    }
9224
1.11k
    if (p->error_indicator) {
9225
0
        p->level--;
9226
0
        return NULL;
9227
0
    }
9228
1.11k
    expr_ty _res = NULL;
9229
1.11k
    int _mark = p->mark;
9230
1.11k
    { // NUMBER
9231
1.11k
        if (p->error_indicator) {
9232
0
            p->level--;
9233
0
            return NULL;
9234
0
        }
9235
1.11k
        D(fprintf(stderr, "%*c> imaginary_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
9236
1.11k
        expr_ty imag;
9237
1.11k
        if (
9238
1.11k
            (imag = _PyPegen_number_token(p))  // NUMBER
9239
1.11k
        )
9240
1.08k
        {
9241
1.08k
            D(fprintf(stderr, "%*c+ imaginary_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER"));
9242
1.08k
            _res = _PyPegen_ensure_imaginary ( p , imag );
9243
1.08k
            if (_res == NULL && PyErr_Occurred()) {
9244
7
                p->error_indicator = 1;
9245
7
                p->level--;
9246
7
                return NULL;
9247
7
            }
9248
1.07k
            goto done;
9249
1.08k
        }
9250
32
        p->mark = _mark;
9251
32
        D(fprintf(stderr, "%*c%s imaginary_number[%d-%d]: %s failed!\n", p->level, ' ',
9252
32
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER"));
9253
32
    }
9254
0
    _res = NULL;
9255
1.11k
  done:
9256
1.11k
    p->level--;
9257
1.11k
    return _res;
9258
32
}
9259
9260
// capture_pattern: pattern_capture_target
9261
static pattern_ty
9262
capture_pattern_rule(Parser *p)
9263
45.7k
{
9264
45.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9265
0
        _Pypegen_stack_overflow(p);
9266
0
    }
9267
45.7k
    if (p->error_indicator) {
9268
0
        p->level--;
9269
0
        return NULL;
9270
0
    }
9271
45.7k
    pattern_ty _res = NULL;
9272
45.7k
    int _mark = p->mark;
9273
45.7k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
9274
0
        p->error_indicator = 1;
9275
0
        p->level--;
9276
0
        return NULL;
9277
0
    }
9278
45.7k
    int _start_lineno = p->tokens[_mark]->lineno;
9279
45.7k
    UNUSED(_start_lineno); // Only used by EXTRA macro
9280
45.7k
    int _start_col_offset = p->tokens[_mark]->col_offset;
9281
45.7k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
9282
45.7k
    { // pattern_capture_target
9283
45.7k
        if (p->error_indicator) {
9284
0
            p->level--;
9285
0
            return NULL;
9286
0
        }
9287
45.7k
        D(fprintf(stderr, "%*c> capture_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern_capture_target"));
9288
45.7k
        expr_ty target;
9289
45.7k
        if (
9290
45.7k
            (target = pattern_capture_target_rule(p))  // pattern_capture_target
9291
45.7k
        )
9292
16.3k
        {
9293
16.3k
            D(fprintf(stderr, "%*c+ capture_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern_capture_target"));
9294
16.3k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
9295
16.3k
            if (_token == NULL) {
9296
0
                p->level--;
9297
0
                return NULL;
9298
0
            }
9299
16.3k
            int _end_lineno = _token->end_lineno;
9300
16.3k
            UNUSED(_end_lineno); // Only used by EXTRA macro
9301
16.3k
            int _end_col_offset = _token->end_col_offset;
9302
16.3k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
9303
16.3k
            _res = _PyAST_MatchAs ( NULL , target -> v . Name . id , EXTRA );
9304
16.3k
            if (_res == NULL && PyErr_Occurred()) {
9305
0
                p->error_indicator = 1;
9306
0
                p->level--;
9307
0
                return NULL;
9308
0
            }
9309
16.3k
            goto done;
9310
16.3k
        }
9311
29.4k
        p->mark = _mark;
9312
29.4k
        D(fprintf(stderr, "%*c%s capture_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9313
29.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern_capture_target"));
9314
29.4k
    }
9315
0
    _res = NULL;
9316
45.7k
  done:
9317
45.7k
    p->level--;
9318
45.7k
    return _res;
9319
29.4k
}
9320
9321
// pattern_capture_target: !"_" NAME !('.' | '(' | '=')
9322
static expr_ty
9323
pattern_capture_target_rule(Parser *p)
9324
48.9k
{
9325
48.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9326
0
        _Pypegen_stack_overflow(p);
9327
0
    }
9328
48.9k
    if (p->error_indicator) {
9329
0
        p->level--;
9330
0
        return NULL;
9331
0
    }
9332
48.9k
    expr_ty _res = NULL;
9333
48.9k
    int _mark = p->mark;
9334
48.9k
    { // !"_" NAME !('.' | '(' | '=')
9335
48.9k
        if (p->error_indicator) {
9336
0
            p->level--;
9337
0
            return NULL;
9338
0
        }
9339
48.9k
        D(fprintf(stderr, "%*c> pattern_capture_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')"));
9340
48.9k
        expr_ty name;
9341
48.9k
        if (
9342
48.9k
            _PyPegen_lookahead_with_string(0, _PyPegen_expect_soft_keyword, p, "_")
9343
48.9k
            &&
9344
48.9k
            (name = _PyPegen_name_token(p))  // NAME
9345
48.9k
            &&
9346
48.9k
            _PyPegen_lookahead(0, _tmp_43_rule, p)
9347
48.9k
        )
9348
18.6k
        {
9349
18.6k
            D(fprintf(stderr, "%*c+ pattern_capture_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')"));
9350
18.6k
            _res = _PyPegen_set_expr_context ( p , name , Store );
9351
18.6k
            if (_res == NULL && PyErr_Occurred()) {
9352
0
                p->error_indicator = 1;
9353
0
                p->level--;
9354
0
                return NULL;
9355
0
            }
9356
18.6k
            goto done;
9357
18.6k
        }
9358
30.2k
        p->mark = _mark;
9359
30.2k
        D(fprintf(stderr, "%*c%s pattern_capture_target[%d-%d]: %s failed!\n", p->level, ' ',
9360
30.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')"));
9361
30.2k
    }
9362
0
    _res = NULL;
9363
48.9k
  done:
9364
48.9k
    p->level--;
9365
48.9k
    return _res;
9366
30.2k
}
9367
9368
// wildcard_pattern: "_"
9369
static pattern_ty
9370
wildcard_pattern_rule(Parser *p)
9371
30.2k
{
9372
30.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9373
0
        _Pypegen_stack_overflow(p);
9374
0
    }
9375
30.2k
    if (p->error_indicator) {
9376
0
        p->level--;
9377
0
        return NULL;
9378
0
    }
9379
30.2k
    pattern_ty _res = NULL;
9380
30.2k
    int _mark = p->mark;
9381
30.2k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
9382
0
        p->error_indicator = 1;
9383
0
        p->level--;
9384
0
        return NULL;
9385
0
    }
9386
30.2k
    int _start_lineno = p->tokens[_mark]->lineno;
9387
30.2k
    UNUSED(_start_lineno); // Only used by EXTRA macro
9388
30.2k
    int _start_col_offset = p->tokens[_mark]->col_offset;
9389
30.2k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
9390
30.2k
    { // "_"
9391
30.2k
        if (p->error_indicator) {
9392
0
            p->level--;
9393
0
            return NULL;
9394
0
        }
9395
30.2k
        D(fprintf(stderr, "%*c> wildcard_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"_\""));
9396
30.2k
        expr_ty _keyword;
9397
30.2k
        if (
9398
30.2k
            (_keyword = _PyPegen_expect_soft_keyword(p, "_"))  // soft_keyword='"_"'
9399
30.2k
        )
9400
4.37k
        {
9401
4.37k
            D(fprintf(stderr, "%*c+ wildcard_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"_\""));
9402
4.37k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
9403
4.37k
            if (_token == NULL) {
9404
0
                p->level--;
9405
0
                return NULL;
9406
0
            }
9407
4.37k
            int _end_lineno = _token->end_lineno;
9408
4.37k
            UNUSED(_end_lineno); // Only used by EXTRA macro
9409
4.37k
            int _end_col_offset = _token->end_col_offset;
9410
4.37k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
9411
4.37k
            _res = _PyAST_MatchAs ( NULL , NULL , EXTRA );
9412
4.37k
            if (_res == NULL && PyErr_Occurred()) {
9413
0
                p->error_indicator = 1;
9414
0
                p->level--;
9415
0
                return NULL;
9416
0
            }
9417
4.37k
            goto done;
9418
4.37k
        }
9419
25.8k
        p->mark = _mark;
9420
25.8k
        D(fprintf(stderr, "%*c%s wildcard_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9421
25.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"_\""));
9422
25.8k
    }
9423
0
    _res = NULL;
9424
30.2k
  done:
9425
30.2k
    p->level--;
9426
30.2k
    return _res;
9427
25.8k
}
9428
9429
// value_pattern: attr !('.' | '(' | '=')
9430
static pattern_ty
9431
value_pattern_rule(Parser *p)
9432
25.8k
{
9433
25.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9434
0
        _Pypegen_stack_overflow(p);
9435
0
    }
9436
25.8k
    if (p->error_indicator) {
9437
0
        p->level--;
9438
0
        return NULL;
9439
0
    }
9440
25.8k
    pattern_ty _res = NULL;
9441
25.8k
    int _mark = p->mark;
9442
25.8k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
9443
0
        p->error_indicator = 1;
9444
0
        p->level--;
9445
0
        return NULL;
9446
0
    }
9447
25.8k
    int _start_lineno = p->tokens[_mark]->lineno;
9448
25.8k
    UNUSED(_start_lineno); // Only used by EXTRA macro
9449
25.8k
    int _start_col_offset = p->tokens[_mark]->col_offset;
9450
25.8k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
9451
25.8k
    { // attr !('.' | '(' | '=')
9452
25.8k
        if (p->error_indicator) {
9453
0
            p->level--;
9454
0
            return NULL;
9455
0
        }
9456
25.8k
        D(fprintf(stderr, "%*c> value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')"));
9457
25.8k
        expr_ty attr;
9458
25.8k
        if (
9459
25.8k
            (attr = attr_rule(p))  // attr
9460
25.8k
            &&
9461
25.8k
            _PyPegen_lookahead(0, _tmp_43_rule, p)
9462
25.8k
        )
9463
352
        {
9464
352
            D(fprintf(stderr, "%*c+ value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')"));
9465
352
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
9466
352
            if (_token == NULL) {
9467
0
                p->level--;
9468
0
                return NULL;
9469
0
            }
9470
352
            int _end_lineno = _token->end_lineno;
9471
352
            UNUSED(_end_lineno); // Only used by EXTRA macro
9472
352
            int _end_col_offset = _token->end_col_offset;
9473
352
            UNUSED(_end_col_offset); // Only used by EXTRA macro
9474
352
            _res = _PyAST_MatchValue ( attr , EXTRA );
9475
352
            if (_res == NULL && PyErr_Occurred()) {
9476
0
                p->error_indicator = 1;
9477
0
                p->level--;
9478
0
                return NULL;
9479
0
            }
9480
352
            goto done;
9481
352
        }
9482
25.4k
        p->mark = _mark;
9483
25.4k
        D(fprintf(stderr, "%*c%s value_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9484
25.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr !('.' | '(' | '=')"));
9485
25.4k
    }
9486
0
    _res = NULL;
9487
25.8k
  done:
9488
25.8k
    p->level--;
9489
25.8k
    return _res;
9490
25.4k
}
9491
9492
// Left-recursive
9493
// attr: name_or_attr '.' NAME
9494
static expr_ty attr_raw(Parser *);
9495
static expr_ty
9496
attr_rule(Parser *p)
9497
129k
{
9498
129k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9499
0
        _Pypegen_stack_overflow(p);
9500
0
    }
9501
129k
    expr_ty _res = NULL;
9502
129k
    if (_PyPegen_is_memoized(p, attr_type, &_res)) {
9503
103k
        p->level--;
9504
103k
        return _res;
9505
103k
    }
9506
26.4k
    int _mark = p->mark;
9507
26.4k
    int _resmark = p->mark;
9508
27.3k
    while (1) {
9509
27.3k
        int tmpvar_1 = _PyPegen_update_memo(p, _mark, attr_type, _res);
9510
27.3k
        if (tmpvar_1) {
9511
0
            p->level--;
9512
0
            return _res;
9513
0
        }
9514
27.3k
        p->mark = _mark;
9515
27.3k
        void *_raw = attr_raw(p);
9516
27.3k
        if (p->error_indicator) {
9517
5
            p->level--;
9518
5
            return NULL;
9519
5
        }
9520
27.3k
        if (_raw == NULL || p->mark <= _resmark)
9521
26.4k
            break;
9522
841
        _resmark = p->mark;
9523
841
        _res = _raw;
9524
841
    }
9525
26.4k
    p->mark = _resmark;
9526
26.4k
    p->level--;
9527
26.4k
    return _res;
9528
26.4k
}
9529
static expr_ty
9530
attr_raw(Parser *p)
9531
27.3k
{
9532
27.3k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9533
0
        _Pypegen_stack_overflow(p);
9534
0
    }
9535
27.3k
    if (p->error_indicator) {
9536
0
        p->level--;
9537
0
        return NULL;
9538
0
    }
9539
27.3k
    expr_ty _res = NULL;
9540
27.3k
    int _mark = p->mark;
9541
27.3k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
9542
0
        p->error_indicator = 1;
9543
0
        p->level--;
9544
0
        return NULL;
9545
0
    }
9546
27.3k
    int _start_lineno = p->tokens[_mark]->lineno;
9547
27.3k
    UNUSED(_start_lineno); // Only used by EXTRA macro
9548
27.3k
    int _start_col_offset = p->tokens[_mark]->col_offset;
9549
27.3k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
9550
27.3k
    { // name_or_attr '.' NAME
9551
27.3k
        if (p->error_indicator) {
9552
0
            p->level--;
9553
0
            return NULL;
9554
0
        }
9555
27.3k
        D(fprintf(stderr, "%*c> attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME"));
9556
27.3k
        Token * _literal;
9557
27.3k
        expr_ty attr;
9558
27.3k
        expr_ty value;
9559
27.3k
        if (
9560
27.3k
            (value = name_or_attr_rule(p))  // name_or_attr
9561
27.3k
            &&
9562
27.3k
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
9563
27.3k
            &&
9564
27.3k
            (attr = _PyPegen_name_token(p))  // NAME
9565
27.3k
        )
9566
841
        {
9567
841
            D(fprintf(stderr, "%*c+ attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME"));
9568
841
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
9569
841
            if (_token == NULL) {
9570
0
                p->level--;
9571
0
                return NULL;
9572
0
            }
9573
841
            int _end_lineno = _token->end_lineno;
9574
841
            UNUSED(_end_lineno); // Only used by EXTRA macro
9575
841
            int _end_col_offset = _token->end_col_offset;
9576
841
            UNUSED(_end_col_offset); // Only used by EXTRA macro
9577
841
            _res = _PyAST_Attribute ( value , attr -> v . Name . id , Load , EXTRA );
9578
841
            if (_res == NULL && PyErr_Occurred()) {
9579
0
                p->error_indicator = 1;
9580
0
                p->level--;
9581
0
                return NULL;
9582
0
            }
9583
841
            goto done;
9584
841
        }
9585
26.4k
        p->mark = _mark;
9586
26.4k
        D(fprintf(stderr, "%*c%s attr[%d-%d]: %s failed!\n", p->level, ' ',
9587
26.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '.' NAME"));
9588
26.4k
    }
9589
0
    _res = NULL;
9590
27.3k
  done:
9591
27.3k
    p->level--;
9592
27.3k
    return _res;
9593
26.4k
}
9594
9595
// Left-recursive
9596
// name_or_attr: attr | NAME
9597
static expr_ty
9598
name_or_attr_rule(Parser *p)
9599
103k
{
9600
103k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9601
0
        _Pypegen_stack_overflow(p);
9602
0
    }
9603
103k
    if (p->error_indicator) {
9604
0
        p->level--;
9605
0
        return NULL;
9606
0
    }
9607
103k
    expr_ty _res = NULL;
9608
103k
    int _mark = p->mark;
9609
103k
    { // attr
9610
103k
        if (p->error_indicator) {
9611
0
            p->level--;
9612
0
            return NULL;
9613
0
        }
9614
103k
        D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr"));
9615
103k
        expr_ty attr_var;
9616
103k
        if (
9617
103k
            (attr_var = attr_rule(p))  // attr
9618
103k
        )
9619
2.37k
        {
9620
2.37k
            D(fprintf(stderr, "%*c+ name_or_attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr"));
9621
2.37k
            _res = attr_var;
9622
2.37k
            goto done;
9623
2.37k
        }
9624
100k
        p->mark = _mark;
9625
100k
        D(fprintf(stderr, "%*c%s name_or_attr[%d-%d]: %s failed!\n", p->level, ' ',
9626
100k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr"));
9627
100k
    }
9628
0
    { // NAME
9629
100k
        if (p->error_indicator) {
9630
0
            p->level--;
9631
0
            return NULL;
9632
0
        }
9633
100k
        D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
9634
100k
        expr_ty name_var;
9635
100k
        if (
9636
100k
            (name_var = _PyPegen_name_token(p))  // NAME
9637
100k
        )
9638
55.2k
        {
9639
55.2k
            D(fprintf(stderr, "%*c+ name_or_attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
9640
55.2k
            _res = name_var;
9641
55.2k
            goto done;
9642
55.2k
        }
9643
45.4k
        p->mark = _mark;
9644
45.4k
        D(fprintf(stderr, "%*c%s name_or_attr[%d-%d]: %s failed!\n", p->level, ' ',
9645
45.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
9646
45.4k
    }
9647
0
    _res = NULL;
9648
103k
  done:
9649
103k
    p->level--;
9650
103k
    return _res;
9651
45.4k
}
9652
9653
// group_pattern: '(' pattern ')'
9654
static pattern_ty
9655
group_pattern_rule(Parser *p)
9656
25.4k
{
9657
25.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9658
0
        _Pypegen_stack_overflow(p);
9659
0
    }
9660
25.4k
    if (p->error_indicator) {
9661
0
        p->level--;
9662
0
        return NULL;
9663
0
    }
9664
25.4k
    pattern_ty _res = NULL;
9665
25.4k
    int _mark = p->mark;
9666
25.4k
    { // '(' pattern ')'
9667
25.4k
        if (p->error_indicator) {
9668
0
            p->level--;
9669
0
            return NULL;
9670
0
        }
9671
25.4k
        D(fprintf(stderr, "%*c> group_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'"));
9672
25.4k
        Token * _literal;
9673
25.4k
        Token * _literal_1;
9674
25.4k
        pattern_ty pattern;
9675
25.4k
        if (
9676
25.4k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
9677
25.4k
            &&
9678
25.4k
            (pattern = pattern_rule(p))  // pattern
9679
25.4k
            &&
9680
25.4k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
9681
25.4k
        )
9682
563
        {
9683
563
            D(fprintf(stderr, "%*c+ group_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'"));
9684
563
            _res = pattern;
9685
563
            if (_res == NULL && PyErr_Occurred()) {
9686
0
                p->error_indicator = 1;
9687
0
                p->level--;
9688
0
                return NULL;
9689
0
            }
9690
563
            goto done;
9691
563
        }
9692
24.9k
        p->mark = _mark;
9693
24.9k
        D(fprintf(stderr, "%*c%s group_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9694
24.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' pattern ')'"));
9695
24.9k
    }
9696
0
    _res = NULL;
9697
25.4k
  done:
9698
25.4k
    p->level--;
9699
25.4k
    return _res;
9700
24.9k
}
9701
9702
// sequence_pattern: '[' maybe_sequence_pattern? ']' | '(' open_sequence_pattern? ')'
9703
static pattern_ty
9704
sequence_pattern_rule(Parser *p)
9705
24.4k
{
9706
24.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9707
0
        _Pypegen_stack_overflow(p);
9708
0
    }
9709
24.4k
    if (p->error_indicator) {
9710
0
        p->level--;
9711
0
        return NULL;
9712
0
    }
9713
24.4k
    pattern_ty _res = NULL;
9714
24.4k
    int _mark = p->mark;
9715
24.4k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
9716
0
        p->error_indicator = 1;
9717
0
        p->level--;
9718
0
        return NULL;
9719
0
    }
9720
24.4k
    int _start_lineno = p->tokens[_mark]->lineno;
9721
24.4k
    UNUSED(_start_lineno); // Only used by EXTRA macro
9722
24.4k
    int _start_col_offset = p->tokens[_mark]->col_offset;
9723
24.4k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
9724
24.4k
    { // '[' maybe_sequence_pattern? ']'
9725
24.4k
        if (p->error_indicator) {
9726
0
            p->level--;
9727
0
            return NULL;
9728
0
        }
9729
24.4k
        D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'"));
9730
24.4k
        Token * _literal;
9731
24.4k
        Token * _literal_1;
9732
24.4k
        void *patterns;
9733
24.4k
        if (
9734
24.4k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
9735
24.4k
            &&
9736
24.4k
            (patterns = maybe_sequence_pattern_rule(p), !p->error_indicator)  // maybe_sequence_pattern?
9737
24.4k
            &&
9738
24.4k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
9739
24.4k
        )
9740
220
        {
9741
220
            D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'"));
9742
220
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
9743
220
            if (_token == NULL) {
9744
0
                p->level--;
9745
0
                return NULL;
9746
0
            }
9747
220
            int _end_lineno = _token->end_lineno;
9748
220
            UNUSED(_end_lineno); // Only used by EXTRA macro
9749
220
            int _end_col_offset = _token->end_col_offset;
9750
220
            UNUSED(_end_col_offset); // Only used by EXTRA macro
9751
220
            _res = _PyAST_MatchSequence ( patterns , EXTRA );
9752
220
            if (_res == NULL && PyErr_Occurred()) {
9753
0
                p->error_indicator = 1;
9754
0
                p->level--;
9755
0
                return NULL;
9756
0
            }
9757
220
            goto done;
9758
220
        }
9759
24.2k
        p->mark = _mark;
9760
24.2k
        D(fprintf(stderr, "%*c%s sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9761
24.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' maybe_sequence_pattern? ']'"));
9762
24.2k
    }
9763
0
    { // '(' open_sequence_pattern? ')'
9764
24.2k
        if (p->error_indicator) {
9765
530
            p->level--;
9766
530
            return NULL;
9767
530
        }
9768
23.7k
        D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'"));
9769
23.7k
        Token * _literal;
9770
23.7k
        Token * _literal_1;
9771
23.7k
        void *patterns;
9772
23.7k
        if (
9773
23.7k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
9774
23.7k
            &&
9775
23.7k
            (patterns = open_sequence_pattern_rule(p), !p->error_indicator)  // open_sequence_pattern?
9776
23.7k
            &&
9777
23.7k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
9778
23.7k
        )
9779
1.39k
        {
9780
1.39k
            D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'"));
9781
1.39k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
9782
1.39k
            if (_token == NULL) {
9783
0
                p->level--;
9784
0
                return NULL;
9785
0
            }
9786
1.39k
            int _end_lineno = _token->end_lineno;
9787
1.39k
            UNUSED(_end_lineno); // Only used by EXTRA macro
9788
1.39k
            int _end_col_offset = _token->end_col_offset;
9789
1.39k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
9790
1.39k
            _res = _PyAST_MatchSequence ( patterns , EXTRA );
9791
1.39k
            if (_res == NULL && PyErr_Occurred()) {
9792
0
                p->error_indicator = 1;
9793
0
                p->level--;
9794
0
                return NULL;
9795
0
            }
9796
1.39k
            goto done;
9797
1.39k
        }
9798
22.3k
        p->mark = _mark;
9799
22.3k
        D(fprintf(stderr, "%*c%s sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9800
22.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' open_sequence_pattern? ')'"));
9801
22.3k
    }
9802
0
    _res = NULL;
9803
23.9k
  done:
9804
23.9k
    p->level--;
9805
23.9k
    return _res;
9806
22.3k
}
9807
9808
// open_sequence_pattern: maybe_star_pattern ',' maybe_sequence_pattern?
9809
static asdl_seq*
9810
open_sequence_pattern_rule(Parser *p)
9811
11.5k
{
9812
11.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9813
0
        _Pypegen_stack_overflow(p);
9814
0
    }
9815
11.5k
    if (p->error_indicator) {
9816
0
        p->level--;
9817
0
        return NULL;
9818
0
    }
9819
11.5k
    asdl_seq* _res = NULL;
9820
11.5k
    int _mark = p->mark;
9821
11.5k
    { // maybe_star_pattern ',' maybe_sequence_pattern?
9822
11.5k
        if (p->error_indicator) {
9823
0
            p->level--;
9824
0
            return NULL;
9825
0
        }
9826
11.5k
        D(fprintf(stderr, "%*c> open_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?"));
9827
11.5k
        Token * _literal;
9828
11.5k
        pattern_ty pattern;
9829
11.5k
        void *patterns;
9830
11.5k
        if (
9831
11.5k
            (pattern = maybe_star_pattern_rule(p))  // maybe_star_pattern
9832
11.5k
            &&
9833
11.5k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
9834
11.5k
            &&
9835
11.5k
            (patterns = maybe_sequence_pattern_rule(p), !p->error_indicator)  // maybe_sequence_pattern?
9836
11.5k
        )
9837
2.86k
        {
9838
2.86k
            D(fprintf(stderr, "%*c+ open_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?"));
9839
2.86k
            _res = _PyPegen_seq_insert_in_front ( p , pattern , patterns );
9840
2.86k
            if (_res == NULL && PyErr_Occurred()) {
9841
0
                p->error_indicator = 1;
9842
0
                p->level--;
9843
0
                return NULL;
9844
0
            }
9845
2.86k
            goto done;
9846
2.86k
        }
9847
8.68k
        p->mark = _mark;
9848
8.68k
        D(fprintf(stderr, "%*c%s open_sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9849
8.68k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?"));
9850
8.68k
    }
9851
0
    _res = NULL;
9852
11.5k
  done:
9853
11.5k
    p->level--;
9854
11.5k
    return _res;
9855
8.68k
}
9856
9857
// maybe_sequence_pattern: ','.maybe_star_pattern+ ','?
9858
static asdl_seq*
9859
maybe_sequence_pattern_rule(Parser *p)
9860
5.81k
{
9861
5.81k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9862
0
        _Pypegen_stack_overflow(p);
9863
0
    }
9864
5.81k
    if (p->error_indicator) {
9865
0
        p->level--;
9866
0
        return NULL;
9867
0
    }
9868
5.81k
    asdl_seq* _res = NULL;
9869
5.81k
    int _mark = p->mark;
9870
5.81k
    { // ','.maybe_star_pattern+ ','?
9871
5.81k
        if (p->error_indicator) {
9872
0
            p->level--;
9873
0
            return NULL;
9874
0
        }
9875
5.81k
        D(fprintf(stderr, "%*c> maybe_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?"));
9876
5.81k
        void *_opt_var;
9877
5.81k
        UNUSED(_opt_var); // Silence compiler warnings
9878
5.81k
        asdl_seq * patterns;
9879
5.81k
        if (
9880
5.81k
            (patterns = _gather_45_rule(p))  // ','.maybe_star_pattern+
9881
5.81k
            &&
9882
5.81k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
9883
5.81k
        )
9884
2.88k
        {
9885
2.88k
            D(fprintf(stderr, "%*c+ maybe_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?"));
9886
2.88k
            _res = patterns;
9887
2.88k
            if (_res == NULL && PyErr_Occurred()) {
9888
0
                p->error_indicator = 1;
9889
0
                p->level--;
9890
0
                return NULL;
9891
0
            }
9892
2.88k
            goto done;
9893
2.88k
        }
9894
2.93k
        p->mark = _mark;
9895
2.93k
        D(fprintf(stderr, "%*c%s maybe_sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9896
2.93k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.maybe_star_pattern+ ','?"));
9897
2.93k
    }
9898
0
    _res = NULL;
9899
5.81k
  done:
9900
5.81k
    p->level--;
9901
5.81k
    return _res;
9902
2.93k
}
9903
9904
// maybe_star_pattern: star_pattern | pattern
9905
static pattern_ty
9906
maybe_star_pattern_rule(Parser *p)
9907
29.7k
{
9908
29.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9909
0
        _Pypegen_stack_overflow(p);
9910
0
    }
9911
29.7k
    if (p->error_indicator) {
9912
0
        p->level--;
9913
0
        return NULL;
9914
0
    }
9915
29.7k
    pattern_ty _res = NULL;
9916
29.7k
    int _mark = p->mark;
9917
29.7k
    { // star_pattern
9918
29.7k
        if (p->error_indicator) {
9919
0
            p->level--;
9920
0
            return NULL;
9921
0
        }
9922
29.7k
        D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_pattern"));
9923
29.7k
        pattern_ty star_pattern_var;
9924
29.7k
        if (
9925
29.7k
            (star_pattern_var = star_pattern_rule(p))  // star_pattern
9926
29.7k
        )
9927
2.57k
        {
9928
2.57k
            D(fprintf(stderr, "%*c+ maybe_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_pattern"));
9929
2.57k
            _res = star_pattern_var;
9930
2.57k
            goto done;
9931
2.57k
        }
9932
27.1k
        p->mark = _mark;
9933
27.1k
        D(fprintf(stderr, "%*c%s maybe_star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9934
27.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_pattern"));
9935
27.1k
    }
9936
0
    { // pattern
9937
27.1k
        if (p->error_indicator) {
9938
31
            p->level--;
9939
31
            return NULL;
9940
31
        }
9941
27.1k
        D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern"));
9942
27.1k
        pattern_ty pattern_var;
9943
27.1k
        if (
9944
27.1k
            (pattern_var = pattern_rule(p))  // pattern
9945
27.1k
        )
9946
19.1k
        {
9947
19.1k
            D(fprintf(stderr, "%*c+ maybe_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern"));
9948
19.1k
            _res = pattern_var;
9949
19.1k
            goto done;
9950
19.1k
        }
9951
8.02k
        p->mark = _mark;
9952
8.02k
        D(fprintf(stderr, "%*c%s maybe_star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
9953
8.02k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern"));
9954
8.02k
    }
9955
0
    _res = NULL;
9956
29.7k
  done:
9957
29.7k
    p->level--;
9958
29.7k
    return _res;
9959
8.02k
}
9960
9961
// star_pattern: '*' pattern_capture_target | '*' wildcard_pattern
9962
static pattern_ty
9963
star_pattern_rule(Parser *p)
9964
29.7k
{
9965
29.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
9966
0
        _Pypegen_stack_overflow(p);
9967
0
    }
9968
29.7k
    if (p->error_indicator) {
9969
0
        p->level--;
9970
0
        return NULL;
9971
0
    }
9972
29.7k
    pattern_ty _res = NULL;
9973
29.7k
    if (_PyPegen_is_memoized(p, star_pattern_type, &_res)) {
9974
5.96k
        p->level--;
9975
5.96k
        return _res;
9976
5.96k
    }
9977
23.7k
    int _mark = p->mark;
9978
23.7k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
9979
0
        p->error_indicator = 1;
9980
0
        p->level--;
9981
0
        return NULL;
9982
0
    }
9983
23.7k
    int _start_lineno = p->tokens[_mark]->lineno;
9984
23.7k
    UNUSED(_start_lineno); // Only used by EXTRA macro
9985
23.7k
    int _start_col_offset = p->tokens[_mark]->col_offset;
9986
23.7k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
9987
23.7k
    { // '*' pattern_capture_target
9988
23.7k
        if (p->error_indicator) {
9989
0
            p->level--;
9990
0
            return NULL;
9991
0
        }
9992
23.7k
        D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target"));
9993
23.7k
        Token * _literal;
9994
23.7k
        expr_ty target;
9995
23.7k
        if (
9996
23.7k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
9997
23.7k
            &&
9998
23.7k
            (target = pattern_capture_target_rule(p))  // pattern_capture_target
9999
23.7k
        )
10000
839
        {
10001
839
            D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target"));
10002
839
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10003
839
            if (_token == NULL) {
10004
0
                p->level--;
10005
0
                return NULL;
10006
0
            }
10007
839
            int _end_lineno = _token->end_lineno;
10008
839
            UNUSED(_end_lineno); // Only used by EXTRA macro
10009
839
            int _end_col_offset = _token->end_col_offset;
10010
839
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10011
839
            _res = _PyAST_MatchStar ( target -> v . Name . id , EXTRA );
10012
839
            if (_res == NULL && PyErr_Occurred()) {
10013
0
                p->error_indicator = 1;
10014
0
                p->level--;
10015
0
                return NULL;
10016
0
            }
10017
839
            goto done;
10018
839
        }
10019
22.9k
        p->mark = _mark;
10020
22.9k
        D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10021
22.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' pattern_capture_target"));
10022
22.9k
    }
10023
0
    { // '*' wildcard_pattern
10024
22.9k
        if (p->error_indicator) {
10025
1
            p->level--;
10026
1
            return NULL;
10027
1
        }
10028
22.9k
        D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern"));
10029
22.9k
        Token * _literal;
10030
22.9k
        pattern_ty wildcard_pattern_var;
10031
22.9k
        if (
10032
22.9k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
10033
22.9k
            &&
10034
22.9k
            (wildcard_pattern_var = wildcard_pattern_rule(p))  // wildcard_pattern
10035
22.9k
        )
10036
767
        {
10037
767
            D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern"));
10038
767
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10039
767
            if (_token == NULL) {
10040
0
                p->level--;
10041
0
                return NULL;
10042
0
            }
10043
767
            int _end_lineno = _token->end_lineno;
10044
767
            UNUSED(_end_lineno); // Only used by EXTRA macro
10045
767
            int _end_col_offset = _token->end_col_offset;
10046
767
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10047
767
            _res = _PyAST_MatchStar ( NULL , EXTRA );
10048
767
            if (_res == NULL && PyErr_Occurred()) {
10049
0
                p->error_indicator = 1;
10050
0
                p->level--;
10051
0
                return NULL;
10052
0
            }
10053
767
            goto done;
10054
767
        }
10055
22.1k
        p->mark = _mark;
10056
22.1k
        D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10057
22.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' wildcard_pattern"));
10058
22.1k
    }
10059
0
    _res = NULL;
10060
23.7k
  done:
10061
23.7k
    _PyPegen_insert_memo(p, _mark, star_pattern_type, _res);
10062
23.7k
    p->level--;
10063
23.7k
    return _res;
10064
22.1k
}
10065
10066
// mapping_pattern:
10067
//     | '{' '}'
10068
//     | '{' double_star_pattern ','? '}'
10069
//     | '{' items_pattern ',' double_star_pattern ','? '}'
10070
//     | '{' items_pattern ','? '}'
10071
static pattern_ty
10072
mapping_pattern_rule(Parser *p)
10073
22.0k
{
10074
22.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10075
0
        _Pypegen_stack_overflow(p);
10076
0
    }
10077
22.0k
    if (p->error_indicator) {
10078
0
        p->level--;
10079
0
        return NULL;
10080
0
    }
10081
22.0k
    pattern_ty _res = NULL;
10082
22.0k
    int _mark = p->mark;
10083
22.0k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
10084
0
        p->error_indicator = 1;
10085
0
        p->level--;
10086
0
        return NULL;
10087
0
    }
10088
22.0k
    int _start_lineno = p->tokens[_mark]->lineno;
10089
22.0k
    UNUSED(_start_lineno); // Only used by EXTRA macro
10090
22.0k
    int _start_col_offset = p->tokens[_mark]->col_offset;
10091
22.0k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
10092
22.0k
    { // '{' '}'
10093
22.0k
        if (p->error_indicator) {
10094
0
            p->level--;
10095
0
            return NULL;
10096
0
        }
10097
22.0k
        D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
10098
22.0k
        Token * _literal;
10099
22.0k
        Token * _literal_1;
10100
22.0k
        if (
10101
22.0k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
10102
22.0k
            &&
10103
22.0k
            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
10104
22.0k
        )
10105
913
        {
10106
913
            D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
10107
913
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10108
913
            if (_token == NULL) {
10109
0
                p->level--;
10110
0
                return NULL;
10111
0
            }
10112
913
            int _end_lineno = _token->end_lineno;
10113
913
            UNUSED(_end_lineno); // Only used by EXTRA macro
10114
913
            int _end_col_offset = _token->end_col_offset;
10115
913
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10116
913
            _res = _PyAST_MatchMapping ( NULL , NULL , NULL , EXTRA );
10117
913
            if (_res == NULL && PyErr_Occurred()) {
10118
0
                p->error_indicator = 1;
10119
0
                p->level--;
10120
0
                return NULL;
10121
0
            }
10122
913
            goto done;
10123
913
        }
10124
21.1k
        p->mark = _mark;
10125
21.1k
        D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10126
21.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '}'"));
10127
21.1k
    }
10128
0
    { // '{' double_star_pattern ','? '}'
10129
21.1k
        if (p->error_indicator) {
10130
1
            p->level--;
10131
1
            return NULL;
10132
1
        }
10133
21.1k
        D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'"));
10134
21.1k
        Token * _literal;
10135
21.1k
        Token * _literal_1;
10136
21.1k
        void *_opt_var;
10137
21.1k
        UNUSED(_opt_var); // Silence compiler warnings
10138
21.1k
        expr_ty rest;
10139
21.1k
        if (
10140
21.1k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
10141
21.1k
            &&
10142
21.1k
            (rest = double_star_pattern_rule(p))  // double_star_pattern
10143
21.1k
            &&
10144
21.1k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
10145
21.1k
            &&
10146
21.1k
            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
10147
21.1k
        )
10148
393
        {
10149
393
            D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'"));
10150
393
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10151
393
            if (_token == NULL) {
10152
0
                p->level--;
10153
0
                return NULL;
10154
0
            }
10155
393
            int _end_lineno = _token->end_lineno;
10156
393
            UNUSED(_end_lineno); // Only used by EXTRA macro
10157
393
            int _end_col_offset = _token->end_col_offset;
10158
393
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10159
393
            _res = _PyAST_MatchMapping ( NULL , NULL , rest -> v . Name . id , EXTRA );
10160
393
            if (_res == NULL && PyErr_Occurred()) {
10161
0
                p->error_indicator = 1;
10162
0
                p->level--;
10163
0
                return NULL;
10164
0
            }
10165
393
            goto done;
10166
393
        }
10167
20.7k
        p->mark = _mark;
10168
20.7k
        D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10169
20.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_star_pattern ','? '}'"));
10170
20.7k
    }
10171
0
    { // '{' items_pattern ',' double_star_pattern ','? '}'
10172
20.7k
        if (p->error_indicator) {
10173
3
            p->level--;
10174
3
            return NULL;
10175
3
        }
10176
20.7k
        D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'"));
10177
20.7k
        Token * _literal;
10178
20.7k
        Token * _literal_1;
10179
20.7k
        Token * _literal_2;
10180
20.7k
        void *_opt_var;
10181
20.7k
        UNUSED(_opt_var); // Silence compiler warnings
10182
20.7k
        asdl_seq* items;
10183
20.7k
        expr_ty rest;
10184
20.7k
        if (
10185
20.7k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
10186
20.7k
            &&
10187
20.7k
            (items = items_pattern_rule(p))  // items_pattern
10188
20.7k
            &&
10189
20.7k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
10190
20.7k
            &&
10191
20.7k
            (rest = double_star_pattern_rule(p))  // double_star_pattern
10192
20.7k
            &&
10193
20.7k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
10194
20.7k
            &&
10195
20.7k
            (_literal_2 = _PyPegen_expect_token(p, 26))  // token='}'
10196
20.7k
        )
10197
439
        {
10198
439
            D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'"));
10199
439
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10200
439
            if (_token == NULL) {
10201
0
                p->level--;
10202
0
                return NULL;
10203
0
            }
10204
439
            int _end_lineno = _token->end_lineno;
10205
439
            UNUSED(_end_lineno); // Only used by EXTRA macro
10206
439
            int _end_col_offset = _token->end_col_offset;
10207
439
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10208
439
            _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , items ) ) , rest -> v . Name . id , EXTRA );
10209
439
            if (_res == NULL && PyErr_Occurred()) {
10210
0
                p->error_indicator = 1;
10211
0
                p->level--;
10212
0
                return NULL;
10213
0
            }
10214
439
            goto done;
10215
439
        }
10216
20.3k
        p->mark = _mark;
10217
20.3k
        D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10218
20.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'"));
10219
20.3k
    }
10220
0
    { // '{' items_pattern ','? '}'
10221
20.3k
        if (p->error_indicator) {
10222
561
            p->level--;
10223
561
            return NULL;
10224
561
        }
10225
19.7k
        D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'"));
10226
19.7k
        Token * _literal;
10227
19.7k
        Token * _literal_1;
10228
19.7k
        void *_opt_var;
10229
19.7k
        UNUSED(_opt_var); // Silence compiler warnings
10230
19.7k
        asdl_seq* items;
10231
19.7k
        if (
10232
19.7k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
10233
19.7k
            &&
10234
19.7k
            (items = items_pattern_rule(p))  // items_pattern
10235
19.7k
            &&
10236
19.7k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
10237
19.7k
            &&
10238
19.7k
            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
10239
19.7k
        )
10240
815
        {
10241
815
            D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'"));
10242
815
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10243
815
            if (_token == NULL) {
10244
0
                p->level--;
10245
0
                return NULL;
10246
0
            }
10247
815
            int _end_lineno = _token->end_lineno;
10248
815
            UNUSED(_end_lineno); // Only used by EXTRA macro
10249
815
            int _end_col_offset = _token->end_col_offset;
10250
815
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10251
815
            _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , items ) ) , NULL , EXTRA );
10252
815
            if (_res == NULL && PyErr_Occurred()) {
10253
0
                p->error_indicator = 1;
10254
0
                p->level--;
10255
0
                return NULL;
10256
0
            }
10257
815
            goto done;
10258
815
        }
10259
18.9k
        p->mark = _mark;
10260
18.9k
        D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10261
18.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ','? '}'"));
10262
18.9k
    }
10263
0
    _res = NULL;
10264
21.5k
  done:
10265
21.5k
    p->level--;
10266
21.5k
    return _res;
10267
18.9k
}
10268
10269
// items_pattern: ','.key_value_pattern+
10270
static asdl_seq*
10271
items_pattern_rule(Parser *p)
10272
5.16k
{
10273
5.16k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10274
0
        _Pypegen_stack_overflow(p);
10275
0
    }
10276
5.16k
    if (p->error_indicator) {
10277
0
        p->level--;
10278
0
        return NULL;
10279
0
    }
10280
5.16k
    asdl_seq* _res = NULL;
10281
5.16k
    int _mark = p->mark;
10282
5.16k
    { // ','.key_value_pattern+
10283
5.16k
        if (p->error_indicator) {
10284
0
            p->level--;
10285
0
            return NULL;
10286
0
        }
10287
5.16k
        D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+"));
10288
5.16k
        asdl_seq * _gather_47_var;
10289
5.16k
        if (
10290
5.16k
            (_gather_47_var = _gather_47_rule(p))  // ','.key_value_pattern+
10291
5.16k
        )
10292
3.50k
        {
10293
3.50k
            D(fprintf(stderr, "%*c+ items_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+"));
10294
3.50k
            _res = _gather_47_var;
10295
3.50k
            goto done;
10296
3.50k
        }
10297
1.65k
        p->mark = _mark;
10298
1.65k
        D(fprintf(stderr, "%*c%s items_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10299
1.65k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.key_value_pattern+"));
10300
1.65k
    }
10301
0
    _res = NULL;
10302
5.16k
  done:
10303
5.16k
    p->level--;
10304
5.16k
    return _res;
10305
1.65k
}
10306
10307
// key_value_pattern: (literal_expr | attr) ':' pattern
10308
static KeyPatternPair*
10309
key_value_pattern_rule(Parser *p)
10310
9.04k
{
10311
9.04k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10312
0
        _Pypegen_stack_overflow(p);
10313
0
    }
10314
9.04k
    if (p->error_indicator) {
10315
0
        p->level--;
10316
0
        return NULL;
10317
0
    }
10318
9.04k
    KeyPatternPair* _res = NULL;
10319
9.04k
    int _mark = p->mark;
10320
9.04k
    { // (literal_expr | attr) ':' pattern
10321
9.04k
        if (p->error_indicator) {
10322
0
            p->level--;
10323
0
            return NULL;
10324
0
        }
10325
9.04k
        D(fprintf(stderr, "%*c> key_value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern"));
10326
9.04k
        Token * _literal;
10327
9.04k
        void *key;
10328
9.04k
        pattern_ty pattern;
10329
9.04k
        if (
10330
9.04k
            (key = _tmp_48_rule(p))  // literal_expr | attr
10331
9.04k
            &&
10332
9.04k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
10333
9.04k
            &&
10334
9.04k
            (pattern = pattern_rule(p))  // pattern
10335
9.04k
        )
10336
5.34k
        {
10337
5.34k
            D(fprintf(stderr, "%*c+ key_value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern"));
10338
5.34k
            _res = _PyPegen_key_pattern_pair ( p , key , pattern );
10339
5.34k
            if (_res == NULL && PyErr_Occurred()) {
10340
0
                p->error_indicator = 1;
10341
0
                p->level--;
10342
0
                return NULL;
10343
0
            }
10344
5.34k
            goto done;
10345
5.34k
        }
10346
3.70k
        p->mark = _mark;
10347
3.70k
        D(fprintf(stderr, "%*c%s key_value_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10348
3.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(literal_expr | attr) ':' pattern"));
10349
3.70k
    }
10350
0
    _res = NULL;
10351
9.04k
  done:
10352
9.04k
    p->level--;
10353
9.04k
    return _res;
10354
3.70k
}
10355
10356
// double_star_pattern: '**' pattern_capture_target
10357
static expr_ty
10358
double_star_pattern_rule(Parser *p)
10359
4.89k
{
10360
4.89k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10361
0
        _Pypegen_stack_overflow(p);
10362
0
    }
10363
4.89k
    if (p->error_indicator) {
10364
346
        p->level--;
10365
346
        return NULL;
10366
346
    }
10367
4.54k
    expr_ty _res = NULL;
10368
4.54k
    int _mark = p->mark;
10369
4.54k
    { // '**' pattern_capture_target
10370
4.54k
        if (p->error_indicator) {
10371
0
            p->level--;
10372
0
            return NULL;
10373
0
        }
10374
4.54k
        D(fprintf(stderr, "%*c> double_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target"));
10375
4.54k
        Token * _literal;
10376
4.54k
        expr_ty target;
10377
4.54k
        if (
10378
4.54k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
10379
4.54k
            &&
10380
4.54k
            (target = pattern_capture_target_rule(p))  // pattern_capture_target
10381
4.54k
        )
10382
842
        {
10383
842
            D(fprintf(stderr, "%*c+ double_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target"));
10384
842
            _res = target;
10385
842
            if (_res == NULL && PyErr_Occurred()) {
10386
0
                p->error_indicator = 1;
10387
0
                p->level--;
10388
0
                return NULL;
10389
0
            }
10390
842
            goto done;
10391
842
        }
10392
3.70k
        p->mark = _mark;
10393
3.70k
        D(fprintf(stderr, "%*c%s double_star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10394
3.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' pattern_capture_target"));
10395
3.70k
    }
10396
0
    _res = NULL;
10397
4.54k
  done:
10398
4.54k
    p->level--;
10399
4.54k
    return _res;
10400
3.70k
}
10401
10402
// class_pattern:
10403
//     | name_or_attr '(' ')'
10404
//     | name_or_attr '(' positional_patterns ','? ')'
10405
//     | name_or_attr '(' keyword_patterns ','? ')'
10406
//     | name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'
10407
//     | invalid_class_pattern
10408
static pattern_ty
10409
class_pattern_rule(Parser *p)
10410
18.9k
{
10411
18.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10412
0
        _Pypegen_stack_overflow(p);
10413
0
    }
10414
18.9k
    if (p->error_indicator) {
10415
0
        p->level--;
10416
0
        return NULL;
10417
0
    }
10418
18.9k
    pattern_ty _res = NULL;
10419
18.9k
    int _mark = p->mark;
10420
18.9k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
10421
0
        p->error_indicator = 1;
10422
0
        p->level--;
10423
0
        return NULL;
10424
0
    }
10425
18.9k
    int _start_lineno = p->tokens[_mark]->lineno;
10426
18.9k
    UNUSED(_start_lineno); // Only used by EXTRA macro
10427
18.9k
    int _start_col_offset = p->tokens[_mark]->col_offset;
10428
18.9k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
10429
18.9k
    { // name_or_attr '(' ')'
10430
18.9k
        if (p->error_indicator) {
10431
0
            p->level--;
10432
0
            return NULL;
10433
0
        }
10434
18.9k
        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'"));
10435
18.9k
        Token * _literal;
10436
18.9k
        Token * _literal_1;
10437
18.9k
        expr_ty cls;
10438
18.9k
        if (
10439
18.9k
            (cls = name_or_attr_rule(p))  // name_or_attr
10440
18.9k
            &&
10441
18.9k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
10442
18.9k
            &&
10443
18.9k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
10444
18.9k
        )
10445
1.13k
        {
10446
1.13k
            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'"));
10447
1.13k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10448
1.13k
            if (_token == NULL) {
10449
0
                p->level--;
10450
0
                return NULL;
10451
0
            }
10452
1.13k
            int _end_lineno = _token->end_lineno;
10453
1.13k
            UNUSED(_end_lineno); // Only used by EXTRA macro
10454
1.13k
            int _end_col_offset = _token->end_col_offset;
10455
1.13k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10456
1.13k
            _res = _PyAST_MatchClass ( cls , NULL , NULL , NULL , EXTRA );
10457
1.13k
            if (_res == NULL && PyErr_Occurred()) {
10458
0
                p->error_indicator = 1;
10459
0
                p->level--;
10460
0
                return NULL;
10461
0
            }
10462
1.13k
            goto done;
10463
1.13k
        }
10464
17.8k
        p->mark = _mark;
10465
17.8k
        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10466
17.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' ')'"));
10467
17.8k
    }
10468
0
    { // name_or_attr '(' positional_patterns ','? ')'
10469
17.8k
        if (p->error_indicator) {
10470
11
            p->level--;
10471
11
            return NULL;
10472
11
        }
10473
17.8k
        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'"));
10474
17.8k
        Token * _literal;
10475
17.8k
        Token * _literal_1;
10476
17.8k
        void *_opt_var;
10477
17.8k
        UNUSED(_opt_var); // Silence compiler warnings
10478
17.8k
        expr_ty cls;
10479
17.8k
        asdl_pattern_seq* patterns;
10480
17.8k
        if (
10481
17.8k
            (cls = name_or_attr_rule(p))  // name_or_attr
10482
17.8k
            &&
10483
17.8k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
10484
17.8k
            &&
10485
17.8k
            (patterns = positional_patterns_rule(p))  // positional_patterns
10486
17.8k
            &&
10487
17.8k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
10488
17.8k
            &&
10489
17.8k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
10490
17.8k
        )
10491
862
        {
10492
862
            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'"));
10493
862
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10494
862
            if (_token == NULL) {
10495
0
                p->level--;
10496
0
                return NULL;
10497
0
            }
10498
862
            int _end_lineno = _token->end_lineno;
10499
862
            UNUSED(_end_lineno); // Only used by EXTRA macro
10500
862
            int _end_col_offset = _token->end_col_offset;
10501
862
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10502
862
            _res = _PyAST_MatchClass ( cls , patterns , NULL , NULL , EXTRA );
10503
862
            if (_res == NULL && PyErr_Occurred()) {
10504
0
                p->error_indicator = 1;
10505
0
                p->level--;
10506
0
                return NULL;
10507
0
            }
10508
862
            goto done;
10509
862
        }
10510
16.9k
        p->mark = _mark;
10511
16.9k
        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10512
16.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'"));
10513
16.9k
    }
10514
0
    { // name_or_attr '(' keyword_patterns ','? ')'
10515
16.9k
        if (p->error_indicator) {
10516
786
            p->level--;
10517
786
            return NULL;
10518
786
        }
10519
16.1k
        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'"));
10520
16.1k
        Token * _literal;
10521
16.1k
        Token * _literal_1;
10522
16.1k
        void *_opt_var;
10523
16.1k
        UNUSED(_opt_var); // Silence compiler warnings
10524
16.1k
        expr_ty cls;
10525
16.1k
        asdl_seq* keywords;
10526
16.1k
        if (
10527
16.1k
            (cls = name_or_attr_rule(p))  // name_or_attr
10528
16.1k
            &&
10529
16.1k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
10530
16.1k
            &&
10531
16.1k
            (keywords = keyword_patterns_rule(p))  // keyword_patterns
10532
16.1k
            &&
10533
16.1k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
10534
16.1k
            &&
10535
16.1k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
10536
16.1k
        )
10537
626
        {
10538
626
            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'"));
10539
626
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10540
626
            if (_token == NULL) {
10541
0
                p->level--;
10542
0
                return NULL;
10543
0
            }
10544
626
            int _end_lineno = _token->end_lineno;
10545
626
            UNUSED(_end_lineno); // Only used by EXTRA macro
10546
626
            int _end_col_offset = _token->end_col_offset;
10547
626
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10548
626
            _res = _PyAST_MatchClass ( cls , NULL , CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
10549
626
            if (_res == NULL && PyErr_Occurred()) {
10550
0
                p->error_indicator = 1;
10551
0
                p->level--;
10552
0
                return NULL;
10553
0
            }
10554
626
            goto done;
10555
626
        }
10556
15.5k
        p->mark = _mark;
10557
15.5k
        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10558
15.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'"));
10559
15.5k
    }
10560
0
    { // name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'
10561
15.5k
        if (p->error_indicator) {
10562
296
            p->level--;
10563
296
            return NULL;
10564
296
        }
10565
15.2k
        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'"));
10566
15.2k
        Token * _literal;
10567
15.2k
        Token * _literal_1;
10568
15.2k
        Token * _literal_2;
10569
15.2k
        void *_opt_var;
10570
15.2k
        UNUSED(_opt_var); // Silence compiler warnings
10571
15.2k
        expr_ty cls;
10572
15.2k
        asdl_seq* keywords;
10573
15.2k
        asdl_pattern_seq* patterns;
10574
15.2k
        if (
10575
15.2k
            (cls = name_or_attr_rule(p))  // name_or_attr
10576
15.2k
            &&
10577
15.2k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
10578
15.2k
            &&
10579
15.2k
            (patterns = positional_patterns_rule(p))  // positional_patterns
10580
15.2k
            &&
10581
15.2k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
10582
15.2k
            &&
10583
15.2k
            (keywords = keyword_patterns_rule(p))  // keyword_patterns
10584
15.2k
            &&
10585
15.2k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
10586
15.2k
            &&
10587
15.2k
            (_literal_2 = _PyPegen_expect_token(p, 8))  // token=')'
10588
15.2k
        )
10589
159
        {
10590
159
            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'"));
10591
159
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10592
159
            if (_token == NULL) {
10593
0
                p->level--;
10594
0
                return NULL;
10595
0
            }
10596
159
            int _end_lineno = _token->end_lineno;
10597
159
            UNUSED(_end_lineno); // Only used by EXTRA macro
10598
159
            int _end_col_offset = _token->end_col_offset;
10599
159
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10600
159
            _res = _PyAST_MatchClass ( cls , patterns , CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
10601
159
            if (_res == NULL && PyErr_Occurred()) {
10602
0
                p->error_indicator = 1;
10603
0
                p->level--;
10604
0
                return NULL;
10605
0
            }
10606
159
            goto done;
10607
159
        }
10608
15.0k
        p->mark = _mark;
10609
15.0k
        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10610
15.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'"));
10611
15.0k
    }
10612
15.0k
    if (p->call_invalid_rules) { // invalid_class_pattern
10613
7.81k
        if (p->error_indicator) {
10614
224
            p->level--;
10615
224
            return NULL;
10616
224
        }
10617
7.59k
        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_pattern"));
10618
7.59k
        void *invalid_class_pattern_var;
10619
7.59k
        if (
10620
7.59k
            (invalid_class_pattern_var = invalid_class_pattern_rule(p))  // invalid_class_pattern
10621
7.59k
        )
10622
0
        {
10623
0
            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_class_pattern"));
10624
0
            _res = invalid_class_pattern_var;
10625
0
            goto done;
10626
0
        }
10627
7.59k
        p->mark = _mark;
10628
7.59k
        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10629
7.59k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_class_pattern"));
10630
7.59k
    }
10631
14.8k
    _res = NULL;
10632
17.6k
  done:
10633
17.6k
    p->level--;
10634
17.6k
    return _res;
10635
14.8k
}
10636
10637
// positional_patterns: ','.pattern+
10638
static asdl_pattern_seq*
10639
positional_patterns_rule(Parser *p)
10640
17.0k
{
10641
17.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10642
0
        _Pypegen_stack_overflow(p);
10643
0
    }
10644
17.0k
    if (p->error_indicator) {
10645
0
        p->level--;
10646
0
        return NULL;
10647
0
    }
10648
17.0k
    asdl_pattern_seq* _res = NULL;
10649
17.0k
    int _mark = p->mark;
10650
17.0k
    { // ','.pattern+
10651
17.0k
        if (p->error_indicator) {
10652
0
            p->level--;
10653
0
            return NULL;
10654
0
        }
10655
17.0k
        D(fprintf(stderr, "%*c> positional_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.pattern+"));
10656
17.0k
        asdl_pattern_seq* args;
10657
17.0k
        if (
10658
17.0k
            (args = (asdl_pattern_seq*)_gather_50_rule(p))  // ','.pattern+
10659
17.0k
        )
10660
10.5k
        {
10661
10.5k
            D(fprintf(stderr, "%*c+ positional_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.pattern+"));
10662
10.5k
            _res = args;
10663
10.5k
            if (_res == NULL && PyErr_Occurred()) {
10664
0
                p->error_indicator = 1;
10665
0
                p->level--;
10666
0
                return NULL;
10667
0
            }
10668
10.5k
            goto done;
10669
10.5k
        }
10670
6.52k
        p->mark = _mark;
10671
6.52k
        D(fprintf(stderr, "%*c%s positional_patterns[%d-%d]: %s failed!\n", p->level, ' ',
10672
6.52k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.pattern+"));
10673
6.52k
    }
10674
0
    _res = NULL;
10675
17.0k
  done:
10676
17.0k
    p->level--;
10677
17.0k
    return _res;
10678
6.52k
}
10679
10680
// keyword_patterns: ','.keyword_pattern+
10681
static asdl_seq*
10682
keyword_patterns_rule(Parser *p)
10683
11.1k
{
10684
11.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10685
0
        _Pypegen_stack_overflow(p);
10686
0
    }
10687
11.1k
    if (p->error_indicator) {
10688
0
        p->level--;
10689
0
        return NULL;
10690
0
    }
10691
11.1k
    asdl_seq* _res = NULL;
10692
11.1k
    int _mark = p->mark;
10693
11.1k
    { // ','.keyword_pattern+
10694
11.1k
        if (p->error_indicator) {
10695
0
            p->level--;
10696
0
            return NULL;
10697
0
        }
10698
11.1k
        D(fprintf(stderr, "%*c> keyword_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+"));
10699
11.1k
        asdl_seq * _gather_52_var;
10700
11.1k
        if (
10701
11.1k
            (_gather_52_var = _gather_52_rule(p))  // ','.keyword_pattern+
10702
11.1k
        )
10703
4.05k
        {
10704
4.05k
            D(fprintf(stderr, "%*c+ keyword_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+"));
10705
4.05k
            _res = _gather_52_var;
10706
4.05k
            goto done;
10707
4.05k
        }
10708
7.08k
        p->mark = _mark;
10709
7.08k
        D(fprintf(stderr, "%*c%s keyword_patterns[%d-%d]: %s failed!\n", p->level, ' ',
10710
7.08k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.keyword_pattern+"));
10711
7.08k
    }
10712
0
    _res = NULL;
10713
11.1k
  done:
10714
11.1k
    p->level--;
10715
11.1k
    return _res;
10716
7.08k
}
10717
10718
// keyword_pattern: NAME '=' pattern
10719
static KeyPatternPair*
10720
keyword_pattern_rule(Parser *p)
10721
15.8k
{
10722
15.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10723
0
        _Pypegen_stack_overflow(p);
10724
0
    }
10725
15.8k
    if (p->error_indicator) {
10726
0
        p->level--;
10727
0
        return NULL;
10728
0
    }
10729
15.8k
    KeyPatternPair* _res = NULL;
10730
15.8k
    int _mark = p->mark;
10731
15.8k
    { // NAME '=' pattern
10732
15.8k
        if (p->error_indicator) {
10733
0
            p->level--;
10734
0
            return NULL;
10735
0
        }
10736
15.8k
        D(fprintf(stderr, "%*c> keyword_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern"));
10737
15.8k
        Token * _literal;
10738
15.8k
        expr_ty arg;
10739
15.8k
        pattern_ty value;
10740
15.8k
        if (
10741
15.8k
            (arg = _PyPegen_name_token(p))  // NAME
10742
15.8k
            &&
10743
15.8k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
10744
15.8k
            &&
10745
15.8k
            (value = pattern_rule(p))  // pattern
10746
15.8k
        )
10747
5.99k
        {
10748
5.99k
            D(fprintf(stderr, "%*c+ keyword_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern"));
10749
5.99k
            _res = _PyPegen_key_pattern_pair ( p , arg , value );
10750
5.99k
            if (_res == NULL && PyErr_Occurred()) {
10751
0
                p->error_indicator = 1;
10752
0
                p->level--;
10753
0
                return NULL;
10754
0
            }
10755
5.99k
            goto done;
10756
5.99k
        }
10757
9.89k
        p->mark = _mark;
10758
9.89k
        D(fprintf(stderr, "%*c%s keyword_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10759
9.89k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' pattern"));
10760
9.89k
    }
10761
0
    _res = NULL;
10762
15.8k
  done:
10763
15.8k
    p->level--;
10764
15.8k
    return _res;
10765
9.89k
}
10766
10767
// type_alias: "type" NAME type_params? '=' expression
10768
static stmt_ty
10769
type_alias_rule(Parser *p)
10770
500
{
10771
500
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10772
0
        _Pypegen_stack_overflow(p);
10773
0
    }
10774
500
    if (p->error_indicator) {
10775
0
        p->level--;
10776
0
        return NULL;
10777
0
    }
10778
500
    stmt_ty _res = NULL;
10779
500
    int _mark = p->mark;
10780
500
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
10781
0
        p->error_indicator = 1;
10782
0
        p->level--;
10783
0
        return NULL;
10784
0
    }
10785
500
    int _start_lineno = p->tokens[_mark]->lineno;
10786
500
    UNUSED(_start_lineno); // Only used by EXTRA macro
10787
500
    int _start_col_offset = p->tokens[_mark]->col_offset;
10788
500
    UNUSED(_start_col_offset); // Only used by EXTRA macro
10789
500
    { // "type" NAME type_params? '=' expression
10790
500
        if (p->error_indicator) {
10791
0
            p->level--;
10792
0
            return NULL;
10793
0
        }
10794
500
        D(fprintf(stderr, "%*c> type_alias[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"type\" NAME type_params? '=' expression"));
10795
500
        expr_ty _keyword;
10796
500
        Token * _literal;
10797
500
        expr_ty b;
10798
500
        expr_ty n;
10799
500
        void *t;
10800
500
        if (
10801
500
            (_keyword = _PyPegen_expect_soft_keyword(p, "type"))  // soft_keyword='"type"'
10802
500
            &&
10803
500
            (n = _PyPegen_name_token(p))  // NAME
10804
500
            &&
10805
500
            (t = type_params_rule(p), !p->error_indicator)  // type_params?
10806
500
            &&
10807
500
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
10808
500
            &&
10809
500
            (b = expression_rule(p))  // expression
10810
500
        )
10811
281
        {
10812
281
            D(fprintf(stderr, "%*c+ type_alias[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"type\" NAME type_params? '=' expression"));
10813
281
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10814
281
            if (_token == NULL) {
10815
0
                p->level--;
10816
0
                return NULL;
10817
0
            }
10818
281
            int _end_lineno = _token->end_lineno;
10819
281
            UNUSED(_end_lineno); // Only used by EXTRA macro
10820
281
            int _end_col_offset = _token->end_col_offset;
10821
281
            UNUSED(_end_col_offset); // Only used by EXTRA macro
10822
281
            _res = CHECK_VERSION ( stmt_ty , 12 , "Type statement is" , _PyAST_TypeAlias ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , n , Store ) ) , t , b , EXTRA ) );
10823
281
            if (_res == NULL && PyErr_Occurred()) {
10824
0
                p->error_indicator = 1;
10825
0
                p->level--;
10826
0
                return NULL;
10827
0
            }
10828
281
            goto done;
10829
281
        }
10830
219
        p->mark = _mark;
10831
219
        D(fprintf(stderr, "%*c%s type_alias[%d-%d]: %s failed!\n", p->level, ' ',
10832
219
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"type\" NAME type_params? '=' expression"));
10833
219
    }
10834
0
    _res = NULL;
10835
500
  done:
10836
500
    p->level--;
10837
500
    return _res;
10838
219
}
10839
10840
// type_params: invalid_type_params | '[' type_param_seq ']'
10841
static asdl_type_param_seq*
10842
type_params_rule(Parser *p)
10843
18.5k
{
10844
18.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10845
0
        _Pypegen_stack_overflow(p);
10846
0
    }
10847
18.5k
    if (p->error_indicator) {
10848
0
        p->level--;
10849
0
        return NULL;
10850
0
    }
10851
18.5k
    asdl_type_param_seq* _res = NULL;
10852
18.5k
    int _mark = p->mark;
10853
18.5k
    if (p->call_invalid_rules) { // invalid_type_params
10854
7.16k
        if (p->error_indicator) {
10855
0
            p->level--;
10856
0
            return NULL;
10857
0
        }
10858
7.16k
        D(fprintf(stderr, "%*c> type_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_type_params"));
10859
7.16k
        void *invalid_type_params_var;
10860
7.16k
        if (
10861
7.16k
            (invalid_type_params_var = invalid_type_params_rule(p))  // invalid_type_params
10862
7.16k
        )
10863
0
        {
10864
0
            D(fprintf(stderr, "%*c+ type_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_type_params"));
10865
0
            _res = invalid_type_params_var;
10866
0
            goto done;
10867
0
        }
10868
7.16k
        p->mark = _mark;
10869
7.16k
        D(fprintf(stderr, "%*c%s type_params[%d-%d]: %s failed!\n", p->level, ' ',
10870
7.16k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_type_params"));
10871
7.16k
    }
10872
18.5k
    { // '[' type_param_seq ']'
10873
18.5k
        if (p->error_indicator) {
10874
3
            p->level--;
10875
3
            return NULL;
10876
3
        }
10877
18.5k
        D(fprintf(stderr, "%*c> type_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' type_param_seq ']'"));
10878
18.5k
        Token * _literal;
10879
18.5k
        Token * _literal_1;
10880
18.5k
        asdl_type_param_seq* t;
10881
18.5k
        if (
10882
18.5k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
10883
18.5k
            &&
10884
18.5k
            (t = type_param_seq_rule(p))  // type_param_seq
10885
18.5k
            &&
10886
18.5k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
10887
18.5k
        )
10888
1.39k
        {
10889
1.39k
            D(fprintf(stderr, "%*c+ type_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' type_param_seq ']'"));
10890
1.39k
            _res = CHECK_VERSION ( asdl_type_param_seq* , 12 , "Type parameter lists are" , t );
10891
1.39k
            if (_res == NULL && PyErr_Occurred()) {
10892
0
                p->error_indicator = 1;
10893
0
                p->level--;
10894
0
                return NULL;
10895
0
            }
10896
1.39k
            goto done;
10897
1.39k
        }
10898
17.1k
        p->mark = _mark;
10899
17.1k
        D(fprintf(stderr, "%*c%s type_params[%d-%d]: %s failed!\n", p->level, ' ',
10900
17.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' type_param_seq ']'"));
10901
17.1k
    }
10902
0
    _res = NULL;
10903
18.5k
  done:
10904
18.5k
    p->level--;
10905
18.5k
    return _res;
10906
17.1k
}
10907
10908
// type_param_seq: ','.type_param+ ','?
10909
static asdl_type_param_seq*
10910
type_param_seq_rule(Parser *p)
10911
1.60k
{
10912
1.60k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10913
0
        _Pypegen_stack_overflow(p);
10914
0
    }
10915
1.60k
    if (p->error_indicator) {
10916
0
        p->level--;
10917
0
        return NULL;
10918
0
    }
10919
1.60k
    asdl_type_param_seq* _res = NULL;
10920
1.60k
    int _mark = p->mark;
10921
1.60k
    { // ','.type_param+ ','?
10922
1.60k
        if (p->error_indicator) {
10923
0
            p->level--;
10924
0
            return NULL;
10925
0
        }
10926
1.60k
        D(fprintf(stderr, "%*c> type_param_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.type_param+ ','?"));
10927
1.60k
        void *_opt_var;
10928
1.60k
        UNUSED(_opt_var); // Silence compiler warnings
10929
1.60k
        asdl_type_param_seq* a;
10930
1.60k
        if (
10931
1.60k
            (a = (asdl_type_param_seq*)_gather_54_rule(p))  // ','.type_param+
10932
1.60k
            &&
10933
1.60k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
10934
1.60k
        )
10935
1.56k
        {
10936
1.56k
            D(fprintf(stderr, "%*c+ type_param_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.type_param+ ','?"));
10937
1.56k
            _res = a;
10938
1.56k
            if (_res == NULL && PyErr_Occurred()) {
10939
0
                p->error_indicator = 1;
10940
0
                p->level--;
10941
0
                return NULL;
10942
0
            }
10943
1.56k
            goto done;
10944
1.56k
        }
10945
41
        p->mark = _mark;
10946
41
        D(fprintf(stderr, "%*c%s type_param_seq[%d-%d]: %s failed!\n", p->level, ' ',
10947
41
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.type_param+ ','?"));
10948
41
    }
10949
0
    _res = NULL;
10950
1.60k
  done:
10951
1.60k
    p->level--;
10952
1.60k
    return _res;
10953
41
}
10954
10955
// type_param:
10956
//     | NAME type_param_bound? type_param_default?
10957
//     | invalid_type_param
10958
//     | '*' NAME type_param_starred_default?
10959
//     | '**' NAME type_param_default?
10960
static type_param_ty
10961
type_param_rule(Parser *p)
10962
11.8k
{
10963
11.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
10964
0
        _Pypegen_stack_overflow(p);
10965
0
    }
10966
11.8k
    if (p->error_indicator) {
10967
0
        p->level--;
10968
0
        return NULL;
10969
0
    }
10970
11.8k
    type_param_ty _res = NULL;
10971
11.8k
    if (_PyPegen_is_memoized(p, type_param_type, &_res)) {
10972
2.97k
        p->level--;
10973
2.97k
        return _res;
10974
2.97k
    }
10975
8.87k
    int _mark = p->mark;
10976
8.87k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
10977
0
        p->error_indicator = 1;
10978
0
        p->level--;
10979
0
        return NULL;
10980
0
    }
10981
8.87k
    int _start_lineno = p->tokens[_mark]->lineno;
10982
8.87k
    UNUSED(_start_lineno); // Only used by EXTRA macro
10983
8.87k
    int _start_col_offset = p->tokens[_mark]->col_offset;
10984
8.87k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
10985
8.87k
    { // NAME type_param_bound? type_param_default?
10986
8.87k
        if (p->error_indicator) {
10987
0
            p->level--;
10988
0
            return NULL;
10989
0
        }
10990
8.87k
        D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME type_param_bound? type_param_default?"));
10991
8.87k
        expr_ty a;
10992
8.87k
        void *b;
10993
8.87k
        void *c;
10994
8.87k
        if (
10995
8.87k
            (a = _PyPegen_name_token(p))  // NAME
10996
8.87k
            &&
10997
8.87k
            (b = type_param_bound_rule(p), !p->error_indicator)  // type_param_bound?
10998
8.87k
            &&
10999
8.87k
            (c = type_param_default_rule(p), !p->error_indicator)  // type_param_default?
11000
8.87k
        )
11001
5.06k
        {
11002
5.06k
            D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME type_param_bound? type_param_default?"));
11003
5.06k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11004
5.06k
            if (_token == NULL) {
11005
0
                p->level--;
11006
0
                return NULL;
11007
0
            }
11008
5.06k
            int _end_lineno = _token->end_lineno;
11009
5.06k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11010
5.06k
            int _end_col_offset = _token->end_col_offset;
11011
5.06k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11012
5.06k
            _res = _PyAST_TypeVar ( a -> v . Name . id , b , c , EXTRA );
11013
5.06k
            if (_res == NULL && PyErr_Occurred()) {
11014
0
                p->error_indicator = 1;
11015
0
                p->level--;
11016
0
                return NULL;
11017
0
            }
11018
5.06k
            goto done;
11019
5.06k
        }
11020
3.80k
        p->mark = _mark;
11021
3.80k
        D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ',
11022
3.80k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME type_param_bound? type_param_default?"));
11023
3.80k
    }
11024
3.80k
    if (p->call_invalid_rules) { // invalid_type_param
11025
1.14k
        if (p->error_indicator) {
11026
1
            p->level--;
11027
1
            return NULL;
11028
1
        }
11029
1.13k
        D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_type_param"));
11030
1.13k
        void *invalid_type_param_var;
11031
1.13k
        if (
11032
1.13k
            (invalid_type_param_var = invalid_type_param_rule(p))  // invalid_type_param
11033
1.13k
        )
11034
0
        {
11035
0
            D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_type_param"));
11036
0
            _res = invalid_type_param_var;
11037
0
            goto done;
11038
0
        }
11039
1.13k
        p->mark = _mark;
11040
1.13k
        D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ',
11041
1.13k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_type_param"));
11042
1.13k
    }
11043
3.80k
    { // '*' NAME type_param_starred_default?
11044
3.80k
        if (p->error_indicator) {
11045
9
            p->level--;
11046
9
            return NULL;
11047
9
        }
11048
3.79k
        D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' NAME type_param_starred_default?"));
11049
3.79k
        Token * _literal;
11050
3.79k
        expr_ty a;
11051
3.79k
        void *b;
11052
3.79k
        if (
11053
3.79k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
11054
3.79k
            &&
11055
3.79k
            (a = _PyPegen_name_token(p))  // NAME
11056
3.79k
            &&
11057
3.79k
            (b = type_param_starred_default_rule(p), !p->error_indicator)  // type_param_starred_default?
11058
3.79k
        )
11059
1.84k
        {
11060
1.84k
            D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' NAME type_param_starred_default?"));
11061
1.84k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11062
1.84k
            if (_token == NULL) {
11063
0
                p->level--;
11064
0
                return NULL;
11065
0
            }
11066
1.84k
            int _end_lineno = _token->end_lineno;
11067
1.84k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11068
1.84k
            int _end_col_offset = _token->end_col_offset;
11069
1.84k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11070
1.84k
            _res = _PyAST_TypeVarTuple ( a -> v . Name . id , b , EXTRA );
11071
1.84k
            if (_res == NULL && PyErr_Occurred()) {
11072
0
                p->error_indicator = 1;
11073
0
                p->level--;
11074
0
                return NULL;
11075
0
            }
11076
1.84k
            goto done;
11077
1.84k
        }
11078
1.95k
        p->mark = _mark;
11079
1.95k
        D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ',
11080
1.95k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' NAME type_param_starred_default?"));
11081
1.95k
    }
11082
0
    { // '**' NAME type_param_default?
11083
1.95k
        if (p->error_indicator) {
11084
4
            p->level--;
11085
4
            return NULL;
11086
4
        }
11087
1.95k
        D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' NAME type_param_default?"));
11088
1.95k
        Token * _literal;
11089
1.95k
        expr_ty a;
11090
1.95k
        void *b;
11091
1.95k
        if (
11092
1.95k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
11093
1.95k
            &&
11094
1.95k
            (a = _PyPegen_name_token(p))  // NAME
11095
1.95k
            &&
11096
1.95k
            (b = type_param_default_rule(p), !p->error_indicator)  // type_param_default?
11097
1.95k
        )
11098
1.26k
        {
11099
1.26k
            D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' NAME type_param_default?"));
11100
1.26k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11101
1.26k
            if (_token == NULL) {
11102
0
                p->level--;
11103
0
                return NULL;
11104
0
            }
11105
1.26k
            int _end_lineno = _token->end_lineno;
11106
1.26k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11107
1.26k
            int _end_col_offset = _token->end_col_offset;
11108
1.26k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11109
1.26k
            _res = _PyAST_ParamSpec ( a -> v . Name . id , b , EXTRA );
11110
1.26k
            if (_res == NULL && PyErr_Occurred()) {
11111
0
                p->error_indicator = 1;
11112
0
                p->level--;
11113
0
                return NULL;
11114
0
            }
11115
1.26k
            goto done;
11116
1.26k
        }
11117
693
        p->mark = _mark;
11118
693
        D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ',
11119
693
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' NAME type_param_default?"));
11120
693
    }
11121
0
    _res = NULL;
11122
8.86k
  done:
11123
8.86k
    _PyPegen_insert_memo(p, _mark, type_param_type, _res);
11124
8.86k
    p->level--;
11125
8.86k
    return _res;
11126
693
}
11127
11128
// type_param_bound: ':' expression
11129
static expr_ty
11130
type_param_bound_rule(Parser *p)
11131
5.07k
{
11132
5.07k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11133
0
        _Pypegen_stack_overflow(p);
11134
0
    }
11135
5.07k
    if (p->error_indicator) {
11136
0
        p->level--;
11137
0
        return NULL;
11138
0
    }
11139
5.07k
    expr_ty _res = NULL;
11140
5.07k
    int _mark = p->mark;
11141
5.07k
    { // ':' expression
11142
5.07k
        if (p->error_indicator) {
11143
0
            p->level--;
11144
0
            return NULL;
11145
0
        }
11146
5.07k
        D(fprintf(stderr, "%*c> type_param_bound[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression"));
11147
5.07k
        Token * _literal;
11148
5.07k
        expr_ty e;
11149
5.07k
        if (
11150
5.07k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
11151
5.07k
            &&
11152
5.07k
            (e = expression_rule(p))  // expression
11153
5.07k
        )
11154
248
        {
11155
248
            D(fprintf(stderr, "%*c+ type_param_bound[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression"));
11156
248
            _res = e;
11157
248
            if (_res == NULL && PyErr_Occurred()) {
11158
0
                p->error_indicator = 1;
11159
0
                p->level--;
11160
0
                return NULL;
11161
0
            }
11162
248
            goto done;
11163
248
        }
11164
4.82k
        p->mark = _mark;
11165
4.82k
        D(fprintf(stderr, "%*c%s type_param_bound[%d-%d]: %s failed!\n", p->level, ' ',
11166
4.82k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression"));
11167
4.82k
    }
11168
0
    _res = NULL;
11169
5.07k
  done:
11170
5.07k
    p->level--;
11171
5.07k
    return _res;
11172
4.82k
}
11173
11174
// type_param_default: '=' expression
11175
static expr_ty
11176
type_param_default_rule(Parser *p)
11177
6.33k
{
11178
6.33k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11179
0
        _Pypegen_stack_overflow(p);
11180
0
    }
11181
6.33k
    if (p->error_indicator) {
11182
0
        p->level--;
11183
0
        return NULL;
11184
0
    }
11185
6.33k
    expr_ty _res = NULL;
11186
6.33k
    int _mark = p->mark;
11187
6.33k
    { // '=' expression
11188
6.33k
        if (p->error_indicator) {
11189
0
            p->level--;
11190
0
            return NULL;
11191
0
        }
11192
6.33k
        D(fprintf(stderr, "%*c> type_param_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' expression"));
11193
6.33k
        Token * _literal;
11194
6.33k
        expr_ty e;
11195
6.33k
        if (
11196
6.33k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
11197
6.33k
            &&
11198
6.33k
            (e = expression_rule(p))  // expression
11199
6.33k
        )
11200
1.33k
        {
11201
1.33k
            D(fprintf(stderr, "%*c+ type_param_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' expression"));
11202
1.33k
            _res = CHECK_VERSION ( expr_ty , 13 , "Type parameter defaults are" , e );
11203
1.33k
            if (_res == NULL && PyErr_Occurred()) {
11204
0
                p->error_indicator = 1;
11205
0
                p->level--;
11206
0
                return NULL;
11207
0
            }
11208
1.33k
            goto done;
11209
1.33k
        }
11210
4.99k
        p->mark = _mark;
11211
4.99k
        D(fprintf(stderr, "%*c%s type_param_default[%d-%d]: %s failed!\n", p->level, ' ',
11212
4.99k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' expression"));
11213
4.99k
    }
11214
0
    _res = NULL;
11215
6.33k
  done:
11216
6.33k
    p->level--;
11217
6.33k
    return _res;
11218
4.99k
}
11219
11220
// type_param_starred_default: '=' star_expression
11221
static expr_ty
11222
type_param_starred_default_rule(Parser *p)
11223
1.84k
{
11224
1.84k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11225
0
        _Pypegen_stack_overflow(p);
11226
0
    }
11227
1.84k
    if (p->error_indicator) {
11228
0
        p->level--;
11229
0
        return NULL;
11230
0
    }
11231
1.84k
    expr_ty _res = NULL;
11232
1.84k
    int _mark = p->mark;
11233
1.84k
    { // '=' star_expression
11234
1.84k
        if (p->error_indicator) {
11235
0
            p->level--;
11236
0
            return NULL;
11237
0
        }
11238
1.84k
        D(fprintf(stderr, "%*c> type_param_starred_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' star_expression"));
11239
1.84k
        Token * _literal;
11240
1.84k
        expr_ty e;
11241
1.84k
        if (
11242
1.84k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
11243
1.84k
            &&
11244
1.84k
            (e = star_expression_rule(p))  // star_expression
11245
1.84k
        )
11246
713
        {
11247
713
            D(fprintf(stderr, "%*c+ type_param_starred_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' star_expression"));
11248
713
            _res = CHECK_VERSION ( expr_ty , 13 , "Type parameter defaults are" , e );
11249
713
            if (_res == NULL && PyErr_Occurred()) {
11250
0
                p->error_indicator = 1;
11251
0
                p->level--;
11252
0
                return NULL;
11253
0
            }
11254
713
            goto done;
11255
713
        }
11256
1.13k
        p->mark = _mark;
11257
1.13k
        D(fprintf(stderr, "%*c%s type_param_starred_default[%d-%d]: %s failed!\n", p->level, ' ',
11258
1.13k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' star_expression"));
11259
1.13k
    }
11260
0
    _res = NULL;
11261
1.84k
  done:
11262
1.84k
    p->level--;
11263
1.84k
    return _res;
11264
1.13k
}
11265
11266
// expressions: expression ((',' expression))+ ','? | expression ',' | expression
11267
static expr_ty
11268
expressions_rule(Parser *p)
11269
8.60k
{
11270
8.60k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11271
0
        _Pypegen_stack_overflow(p);
11272
0
    }
11273
8.60k
    if (p->error_indicator) {
11274
0
        p->level--;
11275
0
        return NULL;
11276
0
    }
11277
8.60k
    expr_ty _res = NULL;
11278
8.60k
    int _mark = p->mark;
11279
8.60k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
11280
10
        p->error_indicator = 1;
11281
10
        p->level--;
11282
10
        return NULL;
11283
10
    }
11284
8.59k
    int _start_lineno = p->tokens[_mark]->lineno;
11285
8.59k
    UNUSED(_start_lineno); // Only used by EXTRA macro
11286
8.59k
    int _start_col_offset = p->tokens[_mark]->col_offset;
11287
8.59k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
11288
8.59k
    { // expression ((',' expression))+ ','?
11289
8.59k
        if (p->error_indicator) {
11290
0
            p->level--;
11291
0
            return NULL;
11292
0
        }
11293
8.59k
        D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?"));
11294
8.59k
        void *_opt_var;
11295
8.59k
        UNUSED(_opt_var); // Silence compiler warnings
11296
8.59k
        expr_ty a;
11297
8.59k
        asdl_seq * b;
11298
8.59k
        if (
11299
8.59k
            (a = expression_rule(p))  // expression
11300
8.59k
            &&
11301
8.59k
            (b = _loop1_55_rule(p))  // ((',' expression))+
11302
8.59k
            &&
11303
8.59k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
11304
8.59k
        )
11305
934
        {
11306
934
            D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?"));
11307
934
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11308
934
            if (_token == NULL) {
11309
0
                p->level--;
11310
0
                return NULL;
11311
0
            }
11312
934
            int _end_lineno = _token->end_lineno;
11313
934
            UNUSED(_end_lineno); // Only used by EXTRA macro
11314
934
            int _end_col_offset = _token->end_col_offset;
11315
934
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11316
934
            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
11317
934
            if (_res == NULL && PyErr_Occurred()) {
11318
0
                p->error_indicator = 1;
11319
0
                p->level--;
11320
0
                return NULL;
11321
0
            }
11322
934
            goto done;
11323
934
        }
11324
7.65k
        p->mark = _mark;
11325
7.65k
        D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ',
11326
7.65k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ((',' expression))+ ','?"));
11327
7.65k
    }
11328
0
    { // expression ','
11329
7.65k
        if (p->error_indicator) {
11330
2
            p->level--;
11331
2
            return NULL;
11332
2
        }
11333
7.65k
        D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ','"));
11334
7.65k
        Token * _literal;
11335
7.65k
        expr_ty a;
11336
7.65k
        if (
11337
7.65k
            (a = expression_rule(p))  // expression
11338
7.65k
            &&
11339
7.65k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
11340
7.65k
        )
11341
1.12k
        {
11342
1.12k
            D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ','"));
11343
1.12k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11344
1.12k
            if (_token == NULL) {
11345
0
                p->level--;
11346
0
                return NULL;
11347
0
            }
11348
1.12k
            int _end_lineno = _token->end_lineno;
11349
1.12k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11350
1.12k
            int _end_col_offset = _token->end_col_offset;
11351
1.12k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11352
1.12k
            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
11353
1.12k
            if (_res == NULL && PyErr_Occurred()) {
11354
0
                p->error_indicator = 1;
11355
0
                p->level--;
11356
0
                return NULL;
11357
0
            }
11358
1.12k
            goto done;
11359
1.12k
        }
11360
6.53k
        p->mark = _mark;
11361
6.53k
        D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ',
11362
6.53k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ','"));
11363
6.53k
    }
11364
0
    { // expression
11365
6.53k
        if (p->error_indicator) {
11366
0
            p->level--;
11367
0
            return NULL;
11368
0
        }
11369
6.53k
        D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
11370
6.53k
        expr_ty expression_var;
11371
6.53k
        if (
11372
6.53k
            (expression_var = expression_rule(p))  // expression
11373
6.53k
        )
11374
713
        {
11375
713
            D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
11376
713
            _res = expression_var;
11377
713
            goto done;
11378
713
        }
11379
5.81k
        p->mark = _mark;
11380
5.81k
        D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ',
11381
5.81k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
11382
5.81k
    }
11383
0
    _res = NULL;
11384
8.59k
  done:
11385
8.59k
    p->level--;
11386
8.59k
    return _res;
11387
5.81k
}
11388
11389
// expression:
11390
//     | invalid_expression
11391
//     | invalid_legacy_expression
11392
//     | disjunction 'if' disjunction 'else' expression
11393
//     | disjunction
11394
//     | lambdef
11395
static expr_ty
11396
expression_rule(Parser *p)
11397
1.63M
{
11398
1.63M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11399
1
        _Pypegen_stack_overflow(p);
11400
1
    }
11401
1.63M
    if (p->error_indicator) {
11402
3
        p->level--;
11403
3
        return NULL;
11404
3
    }
11405
1.63M
    expr_ty _res = NULL;
11406
1.63M
    if (_PyPegen_is_memoized(p, expression_type, &_res)) {
11407
1.04M
        p->level--;
11408
1.04M
        return _res;
11409
1.04M
    }
11410
588k
    int _mark = p->mark;
11411
588k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
11412
0
        p->error_indicator = 1;
11413
0
        p->level--;
11414
0
        return NULL;
11415
0
    }
11416
588k
    int _start_lineno = p->tokens[_mark]->lineno;
11417
588k
    UNUSED(_start_lineno); // Only used by EXTRA macro
11418
588k
    int _start_col_offset = p->tokens[_mark]->col_offset;
11419
588k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
11420
588k
    if (p->call_invalid_rules) { // invalid_expression
11421
206k
        if (p->error_indicator) {
11422
0
            p->level--;
11423
0
            return NULL;
11424
0
        }
11425
206k
        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_expression"));
11426
206k
        void *invalid_expression_var;
11427
206k
        if (
11428
206k
            (invalid_expression_var = invalid_expression_rule(p))  // invalid_expression
11429
206k
        )
11430
0
        {
11431
0
            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_expression"));
11432
0
            _res = invalid_expression_var;
11433
0
            goto done;
11434
0
        }
11435
206k
        p->mark = _mark;
11436
206k
        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11437
206k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_expression"));
11438
206k
    }
11439
588k
    if (p->call_invalid_rules) { // invalid_legacy_expression
11440
206k
        if (p->error_indicator) {
11441
29.1k
            p->level--;
11442
29.1k
            return NULL;
11443
29.1k
        }
11444
177k
        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_legacy_expression"));
11445
177k
        void *invalid_legacy_expression_var;
11446
177k
        if (
11447
177k
            (invalid_legacy_expression_var = invalid_legacy_expression_rule(p))  // invalid_legacy_expression
11448
177k
        )
11449
0
        {
11450
0
            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_legacy_expression"));
11451
0
            _res = invalid_legacy_expression_var;
11452
0
            goto done;
11453
0
        }
11454
177k
        p->mark = _mark;
11455
177k
        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11456
177k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_legacy_expression"));
11457
177k
    }
11458
559k
    { // disjunction 'if' disjunction 'else' expression
11459
559k
        if (p->error_indicator) {
11460
1.13k
            p->level--;
11461
1.13k
            return NULL;
11462
1.13k
        }
11463
558k
        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
11464
558k
        Token * _keyword;
11465
558k
        Token * _keyword_1;
11466
558k
        expr_ty a;
11467
558k
        expr_ty b;
11468
558k
        expr_ty c;
11469
558k
        if (
11470
558k
            (a = disjunction_rule(p))  // disjunction
11471
558k
            &&
11472
558k
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
11473
558k
            &&
11474
558k
            (b = disjunction_rule(p))  // disjunction
11475
558k
            &&
11476
558k
            (_keyword_1 = _PyPegen_expect_token(p, 691))  // token='else'
11477
558k
            &&
11478
558k
            (c = expression_rule(p))  // expression
11479
558k
        )
11480
1.03k
        {
11481
1.03k
            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
11482
1.03k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11483
1.03k
            if (_token == NULL) {
11484
0
                p->level--;
11485
0
                return NULL;
11486
0
            }
11487
1.03k
            int _end_lineno = _token->end_lineno;
11488
1.03k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11489
1.03k
            int _end_col_offset = _token->end_col_offset;
11490
1.03k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11491
1.03k
            _res = _PyAST_IfExp ( b , a , c , EXTRA );
11492
1.03k
            if (_res == NULL && PyErr_Occurred()) {
11493
0
                p->error_indicator = 1;
11494
0
                p->level--;
11495
0
                return NULL;
11496
0
            }
11497
1.03k
            goto done;
11498
1.03k
        }
11499
557k
        p->mark = _mark;
11500
557k
        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11501
557k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
11502
557k
    }
11503
0
    { // disjunction
11504
557k
        if (p->error_indicator) {
11505
7.52k
            p->level--;
11506
7.52k
            return NULL;
11507
7.52k
        }
11508
549k
        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction"));
11509
549k
        expr_ty disjunction_var;
11510
549k
        if (
11511
549k
            (disjunction_var = disjunction_rule(p))  // disjunction
11512
549k
        )
11513
334k
        {
11514
334k
            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction"));
11515
334k
            _res = disjunction_var;
11516
334k
            goto done;
11517
334k
        }
11518
215k
        p->mark = _mark;
11519
215k
        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11520
215k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction"));
11521
215k
    }
11522
0
    { // lambdef
11523
215k
        if (p->error_indicator) {
11524
0
            p->level--;
11525
0
            return NULL;
11526
0
        }
11527
215k
        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambdef"));
11528
215k
        expr_ty lambdef_var;
11529
215k
        if (
11530
215k
            (lambdef_var = lambdef_rule(p))  // lambdef
11531
215k
        )
11532
2.23k
        {
11533
2.23k
            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambdef"));
11534
2.23k
            _res = lambdef_var;
11535
2.23k
            goto done;
11536
2.23k
        }
11537
212k
        p->mark = _mark;
11538
212k
        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11539
212k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambdef"));
11540
212k
    }
11541
0
    _res = NULL;
11542
550k
  done:
11543
550k
    _PyPegen_insert_memo(p, _mark, expression_type, _res);
11544
550k
    p->level--;
11545
550k
    return _res;
11546
212k
}
11547
11548
// yield_expr: 'yield' 'from' expression | 'yield' star_expressions?
11549
static expr_ty
11550
yield_expr_rule(Parser *p)
11551
111k
{
11552
111k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11553
1
        _Pypegen_stack_overflow(p);
11554
1
    }
11555
111k
    if (p->error_indicator) {
11556
1
        p->level--;
11557
1
        return NULL;
11558
1
    }
11559
111k
    expr_ty _res = NULL;
11560
111k
    int _mark = p->mark;
11561
111k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
11562
54
        p->error_indicator = 1;
11563
54
        p->level--;
11564
54
        return NULL;
11565
54
    }
11566
111k
    int _start_lineno = p->tokens[_mark]->lineno;
11567
111k
    UNUSED(_start_lineno); // Only used by EXTRA macro
11568
111k
    int _start_col_offset = p->tokens[_mark]->col_offset;
11569
111k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
11570
111k
    { // 'yield' 'from' expression
11571
111k
        if (p->error_indicator) {
11572
0
            p->level--;
11573
0
            return NULL;
11574
0
        }
11575
111k
        D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression"));
11576
111k
        Token * _keyword;
11577
111k
        Token * _keyword_1;
11578
111k
        expr_ty a;
11579
111k
        if (
11580
111k
            (_keyword = _PyPegen_expect_token(p, 588))  // token='yield'
11581
111k
            &&
11582
111k
            (_keyword_1 = _PyPegen_expect_token(p, 638))  // token='from'
11583
111k
            &&
11584
111k
            (a = expression_rule(p))  // expression
11585
111k
        )
11586
291
        {
11587
291
            D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression"));
11588
291
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11589
291
            if (_token == NULL) {
11590
0
                p->level--;
11591
0
                return NULL;
11592
0
            }
11593
291
            int _end_lineno = _token->end_lineno;
11594
291
            UNUSED(_end_lineno); // Only used by EXTRA macro
11595
291
            int _end_col_offset = _token->end_col_offset;
11596
291
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11597
291
            _res = _PyAST_YieldFrom ( a , EXTRA );
11598
291
            if (_res == NULL && PyErr_Occurred()) {
11599
0
                p->error_indicator = 1;
11600
0
                p->level--;
11601
0
                return NULL;
11602
0
            }
11603
291
            goto done;
11604
291
        }
11605
111k
        p->mark = _mark;
11606
111k
        D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ',
11607
111k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' 'from' expression"));
11608
111k
    }
11609
0
    { // 'yield' star_expressions?
11610
111k
        if (p->error_indicator) {
11611
73
            p->level--;
11612
73
            return NULL;
11613
73
        }
11614
111k
        D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?"));
11615
111k
        Token * _keyword;
11616
111k
        void *a;
11617
111k
        if (
11618
111k
            (_keyword = _PyPegen_expect_token(p, 588))  // token='yield'
11619
111k
            &&
11620
111k
            (a = star_expressions_rule(p), !p->error_indicator)  // star_expressions?
11621
111k
        )
11622
2.70k
        {
11623
2.70k
            D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?"));
11624
2.70k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11625
2.70k
            if (_token == NULL) {
11626
0
                p->level--;
11627
0
                return NULL;
11628
0
            }
11629
2.70k
            int _end_lineno = _token->end_lineno;
11630
2.70k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11631
2.70k
            int _end_col_offset = _token->end_col_offset;
11632
2.70k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11633
2.70k
            _res = _PyAST_Yield ( a , EXTRA );
11634
2.70k
            if (_res == NULL && PyErr_Occurred()) {
11635
0
                p->error_indicator = 1;
11636
0
                p->level--;
11637
0
                return NULL;
11638
0
            }
11639
2.70k
            goto done;
11640
2.70k
        }
11641
108k
        p->mark = _mark;
11642
108k
        D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ',
11643
108k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' star_expressions?"));
11644
108k
    }
11645
0
    _res = NULL;
11646
111k
  done:
11647
111k
    p->level--;
11648
111k
    return _res;
11649
108k
}
11650
11651
// star_expressions:
11652
//     | star_expression ((',' star_expression))+ ','?
11653
//     | star_expression ','
11654
//     | star_expression
11655
static expr_ty
11656
star_expressions_rule(Parser *p)
11657
333k
{
11658
333k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11659
0
        _Pypegen_stack_overflow(p);
11660
0
    }
11661
333k
    if (p->error_indicator) {
11662
0
        p->level--;
11663
0
        return NULL;
11664
0
    }
11665
333k
    expr_ty _res = NULL;
11666
333k
    int _mark = p->mark;
11667
333k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
11668
6
        p->error_indicator = 1;
11669
6
        p->level--;
11670
6
        return NULL;
11671
6
    }
11672
333k
    int _start_lineno = p->tokens[_mark]->lineno;
11673
333k
    UNUSED(_start_lineno); // Only used by EXTRA macro
11674
333k
    int _start_col_offset = p->tokens[_mark]->col_offset;
11675
333k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
11676
333k
    { // star_expression ((',' star_expression))+ ','?
11677
333k
        if (p->error_indicator) {
11678
0
            p->level--;
11679
0
            return NULL;
11680
0
        }
11681
333k
        D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
11682
333k
        void *_opt_var;
11683
333k
        UNUSED(_opt_var); // Silence compiler warnings
11684
333k
        expr_ty a;
11685
333k
        asdl_seq * b;
11686
333k
        if (
11687
333k
            (a = star_expression_rule(p))  // star_expression
11688
333k
            &&
11689
333k
            (b = _loop1_56_rule(p))  // ((',' star_expression))+
11690
333k
            &&
11691
333k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
11692
333k
        )
11693
5.23k
        {
11694
5.23k
            D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
11695
5.23k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11696
5.23k
            if (_token == NULL) {
11697
0
                p->level--;
11698
0
                return NULL;
11699
0
            }
11700
5.23k
            int _end_lineno = _token->end_lineno;
11701
5.23k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11702
5.23k
            int _end_col_offset = _token->end_col_offset;
11703
5.23k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11704
5.23k
            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
11705
5.23k
            if (_res == NULL && PyErr_Occurred()) {
11706
0
                p->error_indicator = 1;
11707
0
                p->level--;
11708
0
                return NULL;
11709
0
            }
11710
5.23k
            goto done;
11711
5.23k
        }
11712
328k
        p->mark = _mark;
11713
328k
        D(fprintf(stderr, "%*c%s star_expressions[%d-%d]: %s failed!\n", p->level, ' ',
11714
328k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
11715
328k
    }
11716
0
    { // star_expression ','
11717
328k
        if (p->error_indicator) {
11718
4.48k
            p->level--;
11719
4.48k
            return NULL;
11720
4.48k
        }
11721
324k
        D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression ','"));
11722
324k
        Token * _literal;
11723
324k
        expr_ty a;
11724
324k
        if (
11725
324k
            (a = star_expression_rule(p))  // star_expression
11726
324k
            &&
11727
324k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
11728
324k
        )
11729
12.0k
        {
11730
12.0k
            D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression ','"));
11731
12.0k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11732
12.0k
            if (_token == NULL) {
11733
0
                p->level--;
11734
0
                return NULL;
11735
0
            }
11736
12.0k
            int _end_lineno = _token->end_lineno;
11737
12.0k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11738
12.0k
            int _end_col_offset = _token->end_col_offset;
11739
12.0k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11740
12.0k
            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
11741
12.0k
            if (_res == NULL && PyErr_Occurred()) {
11742
0
                p->error_indicator = 1;
11743
0
                p->level--;
11744
0
                return NULL;
11745
0
            }
11746
12.0k
            goto done;
11747
12.0k
        }
11748
311k
        p->mark = _mark;
11749
311k
        D(fprintf(stderr, "%*c%s star_expressions[%d-%d]: %s failed!\n", p->level, ' ',
11750
311k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expression ','"));
11751
311k
    }
11752
0
    { // star_expression
11753
311k
        if (p->error_indicator) {
11754
0
            p->level--;
11755
0
            return NULL;
11756
0
        }
11757
311k
        D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression"));
11758
311k
        expr_ty star_expression_var;
11759
311k
        if (
11760
311k
            (star_expression_var = star_expression_rule(p))  // star_expression
11761
311k
        )
11762
176k
        {
11763
176k
            D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression"));
11764
176k
            _res = star_expression_var;
11765
176k
            goto done;
11766
176k
        }
11767
135k
        p->mark = _mark;
11768
135k
        D(fprintf(stderr, "%*c%s star_expressions[%d-%d]: %s failed!\n", p->level, ' ',
11769
135k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expression"));
11770
135k
    }
11771
0
    _res = NULL;
11772
329k
  done:
11773
329k
    p->level--;
11774
329k
    return _res;
11775
135k
}
11776
11777
// star_expression: '*' bitwise_or | expression
11778
static expr_ty
11779
star_expression_rule(Parser *p)
11780
998k
{
11781
998k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11782
1
        _Pypegen_stack_overflow(p);
11783
1
    }
11784
998k
    if (p->error_indicator) {
11785
1
        p->level--;
11786
1
        return NULL;
11787
1
    }
11788
998k
    expr_ty _res = NULL;
11789
998k
    if (_PyPegen_is_memoized(p, star_expression_type, &_res)) {
11790
717k
        p->level--;
11791
717k
        return _res;
11792
717k
    }
11793
280k
    int _mark = p->mark;
11794
280k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
11795
0
        p->error_indicator = 1;
11796
0
        p->level--;
11797
0
        return NULL;
11798
0
    }
11799
280k
    int _start_lineno = p->tokens[_mark]->lineno;
11800
280k
    UNUSED(_start_lineno); // Only used by EXTRA macro
11801
280k
    int _start_col_offset = p->tokens[_mark]->col_offset;
11802
280k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
11803
280k
    { // '*' bitwise_or
11804
280k
        if (p->error_indicator) {
11805
0
            p->level--;
11806
0
            return NULL;
11807
0
        }
11808
280k
        D(fprintf(stderr, "%*c> star_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
11809
280k
        Token * _literal;
11810
280k
        expr_ty a;
11811
280k
        if (
11812
280k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
11813
280k
            &&
11814
280k
            (a = bitwise_or_rule(p))  // bitwise_or
11815
280k
        )
11816
2.42k
        {
11817
2.42k
            D(fprintf(stderr, "%*c+ star_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
11818
2.42k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11819
2.42k
            if (_token == NULL) {
11820
0
                p->level--;
11821
0
                return NULL;
11822
0
            }
11823
2.42k
            int _end_lineno = _token->end_lineno;
11824
2.42k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11825
2.42k
            int _end_col_offset = _token->end_col_offset;
11826
2.42k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11827
2.42k
            _res = _PyAST_Starred ( a , Load , EXTRA );
11828
2.42k
            if (_res == NULL && PyErr_Occurred()) {
11829
0
                p->error_indicator = 1;
11830
0
                p->level--;
11831
0
                return NULL;
11832
0
            }
11833
2.42k
            goto done;
11834
2.42k
        }
11835
278k
        p->mark = _mark;
11836
278k
        D(fprintf(stderr, "%*c%s star_expression[%d-%d]: %s failed!\n", p->level, ' ',
11837
278k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' bitwise_or"));
11838
278k
    }
11839
0
    { // expression
11840
278k
        if (p->error_indicator) {
11841
183
            p->level--;
11842
183
            return NULL;
11843
183
        }
11844
278k
        D(fprintf(stderr, "%*c> star_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
11845
278k
        expr_ty expression_var;
11846
278k
        if (
11847
278k
            (expression_var = expression_rule(p))  // expression
11848
278k
        )
11849
149k
        {
11850
149k
            D(fprintf(stderr, "%*c+ star_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
11851
149k
            _res = expression_var;
11852
149k
            goto done;
11853
149k
        }
11854
129k
        p->mark = _mark;
11855
129k
        D(fprintf(stderr, "%*c%s star_expression[%d-%d]: %s failed!\n", p->level, ' ',
11856
129k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
11857
129k
    }
11858
0
    _res = NULL;
11859
280k
  done:
11860
280k
    _PyPegen_insert_memo(p, _mark, star_expression_type, _res);
11861
280k
    p->level--;
11862
280k
    return _res;
11863
129k
}
11864
11865
// star_named_expressions: ','.star_named_expression+ ','?
11866
static asdl_expr_seq*
11867
star_named_expressions_rule(Parser *p)
11868
92.9k
{
11869
92.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11870
1
        _Pypegen_stack_overflow(p);
11871
1
    }
11872
92.9k
    if (p->error_indicator) {
11873
1
        p->level--;
11874
1
        return NULL;
11875
1
    }
11876
92.9k
    asdl_expr_seq* _res = NULL;
11877
92.9k
    int _mark = p->mark;
11878
92.9k
    { // ','.star_named_expression+ ','?
11879
92.9k
        if (p->error_indicator) {
11880
0
            p->level--;
11881
0
            return NULL;
11882
0
        }
11883
92.9k
        D(fprintf(stderr, "%*c> star_named_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.star_named_expression+ ','?"));
11884
92.9k
        void *_opt_var;
11885
92.9k
        UNUSED(_opt_var); // Silence compiler warnings
11886
92.9k
        asdl_expr_seq* a;
11887
92.9k
        if (
11888
92.9k
            (a = (asdl_expr_seq*)_gather_58_rule(p))  // ','.star_named_expression+
11889
92.9k
            &&
11890
92.9k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
11891
92.9k
        )
11892
36.9k
        {
11893
36.9k
            D(fprintf(stderr, "%*c+ star_named_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.star_named_expression+ ','?"));
11894
36.9k
            _res = a;
11895
36.9k
            if (_res == NULL && PyErr_Occurred()) {
11896
0
                p->error_indicator = 1;
11897
0
                p->level--;
11898
0
                return NULL;
11899
0
            }
11900
36.9k
            goto done;
11901
36.9k
        }
11902
55.9k
        p->mark = _mark;
11903
55.9k
        D(fprintf(stderr, "%*c%s star_named_expressions[%d-%d]: %s failed!\n", p->level, ' ',
11904
55.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.star_named_expression+ ','?"));
11905
55.9k
    }
11906
0
    _res = NULL;
11907
92.9k
  done:
11908
92.9k
    p->level--;
11909
92.9k
    return _res;
11910
55.9k
}
11911
11912
// star_named_expression: '*' bitwise_or | named_expression
11913
static expr_ty
11914
star_named_expression_rule(Parser *p)
11915
308k
{
11916
308k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
11917
1
        _Pypegen_stack_overflow(p);
11918
1
    }
11919
308k
    if (p->error_indicator) {
11920
1
        p->level--;
11921
1
        return NULL;
11922
1
    }
11923
308k
    expr_ty _res = NULL;
11924
308k
    int _mark = p->mark;
11925
308k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
11926
169
        p->error_indicator = 1;
11927
169
        p->level--;
11928
169
        return NULL;
11929
169
    }
11930
308k
    int _start_lineno = p->tokens[_mark]->lineno;
11931
308k
    UNUSED(_start_lineno); // Only used by EXTRA macro
11932
308k
    int _start_col_offset = p->tokens[_mark]->col_offset;
11933
308k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
11934
308k
    { // '*' bitwise_or
11935
308k
        if (p->error_indicator) {
11936
0
            p->level--;
11937
0
            return NULL;
11938
0
        }
11939
308k
        D(fprintf(stderr, "%*c> star_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
11940
308k
        Token * _literal;
11941
308k
        expr_ty a;
11942
308k
        if (
11943
308k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
11944
308k
            &&
11945
308k
            (a = bitwise_or_rule(p))  // bitwise_or
11946
308k
        )
11947
3.48k
        {
11948
3.48k
            D(fprintf(stderr, "%*c+ star_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
11949
3.48k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11950
3.48k
            if (_token == NULL) {
11951
0
                p->level--;
11952
0
                return NULL;
11953
0
            }
11954
3.48k
            int _end_lineno = _token->end_lineno;
11955
3.48k
            UNUSED(_end_lineno); // Only used by EXTRA macro
11956
3.48k
            int _end_col_offset = _token->end_col_offset;
11957
3.48k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
11958
3.48k
            _res = _PyAST_Starred ( a , Load , EXTRA );
11959
3.48k
            if (_res == NULL && PyErr_Occurred()) {
11960
0
                p->error_indicator = 1;
11961
0
                p->level--;
11962
0
                return NULL;
11963
0
            }
11964
3.48k
            goto done;
11965
3.48k
        }
11966
304k
        p->mark = _mark;
11967
304k
        D(fprintf(stderr, "%*c%s star_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
11968
304k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' bitwise_or"));
11969
304k
    }
11970
0
    { // named_expression
11971
304k
        if (p->error_indicator) {
11972
676
            p->level--;
11973
676
            return NULL;
11974
676
        }
11975
304k
        D(fprintf(stderr, "%*c> star_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
11976
304k
        expr_ty named_expression_var;
11977
304k
        if (
11978
304k
            (named_expression_var = named_expression_rule(p))  // named_expression
11979
304k
        )
11980
155k
        {
11981
155k
            D(fprintf(stderr, "%*c+ star_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
11982
155k
            _res = named_expression_var;
11983
155k
            goto done;
11984
155k
        }
11985
149k
        p->mark = _mark;
11986
149k
        D(fprintf(stderr, "%*c%s star_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
11987
149k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
11988
149k
    }
11989
0
    _res = NULL;
11990
307k
  done:
11991
307k
    p->level--;
11992
307k
    return _res;
11993
149k
}
11994
11995
// assignment_expression: NAME ':=' ~ expression
11996
static expr_ty
11997
assignment_expression_rule(Parser *p)
11998
599k
{
11999
599k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12000
1
        _Pypegen_stack_overflow(p);
12001
1
    }
12002
599k
    if (p->error_indicator) {
12003
1
        p->level--;
12004
1
        return NULL;
12005
1
    }
12006
599k
    expr_ty _res = NULL;
12007
599k
    int _mark = p->mark;
12008
599k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
12009
79
        p->error_indicator = 1;
12010
79
        p->level--;
12011
79
        return NULL;
12012
79
    }
12013
599k
    int _start_lineno = p->tokens[_mark]->lineno;
12014
599k
    UNUSED(_start_lineno); // Only used by EXTRA macro
12015
599k
    int _start_col_offset = p->tokens[_mark]->col_offset;
12016
599k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
12017
599k
    { // NAME ':=' ~ expression
12018
599k
        if (p->error_indicator) {
12019
0
            p->level--;
12020
0
            return NULL;
12021
0
        }
12022
599k
        D(fprintf(stderr, "%*c> assignment_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression"));
12023
599k
        int _cut_var = 0;
12024
599k
        Token * _literal;
12025
599k
        expr_ty a;
12026
599k
        expr_ty b;
12027
599k
        if (
12028
599k
            (a = _PyPegen_name_token(p))  // NAME
12029
599k
            &&
12030
599k
            (_literal = _PyPegen_expect_token(p, 53))  // token=':='
12031
599k
            &&
12032
599k
            (_cut_var = 1)
12033
599k
            &&
12034
599k
            (b = expression_rule(p))  // expression
12035
599k
        )
12036
1.06k
        {
12037
1.06k
            D(fprintf(stderr, "%*c+ assignment_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression"));
12038
1.06k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12039
1.06k
            if (_token == NULL) {
12040
0
                p->level--;
12041
0
                return NULL;
12042
0
            }
12043
1.06k
            int _end_lineno = _token->end_lineno;
12044
1.06k
            UNUSED(_end_lineno); // Only used by EXTRA macro
12045
1.06k
            int _end_col_offset = _token->end_col_offset;
12046
1.06k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
12047
1.06k
            _res = CHECK_VERSION ( expr_ty , 8 , "Assignment expressions are" , _PyAST_NamedExpr ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , EXTRA ) );
12048
1.06k
            if (_res == NULL && PyErr_Occurred()) {
12049
0
                p->error_indicator = 1;
12050
0
                p->level--;
12051
0
                return NULL;
12052
0
            }
12053
1.06k
            goto done;
12054
1.06k
        }
12055
598k
        p->mark = _mark;
12056
598k
        D(fprintf(stderr, "%*c%s assignment_expression[%d-%d]: %s failed!\n", p->level, ' ',
12057
598k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ':=' ~ expression"));
12058
598k
        if (_cut_var) {
12059
3.05k
            p->level--;
12060
3.05k
            return NULL;
12061
3.05k
        }
12062
598k
    }
12063
595k
    _res = NULL;
12064
596k
  done:
12065
596k
    p->level--;
12066
596k
    return _res;
12067
595k
}
12068
12069
// named_expression: assignment_expression | invalid_named_expression | expression !':='
12070
static expr_ty
12071
named_expression_rule(Parser *p)
12072
423k
{
12073
423k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12074
1
        _Pypegen_stack_overflow(p);
12075
1
    }
12076
423k
    if (p->error_indicator) {
12077
1
        p->level--;
12078
1
        return NULL;
12079
1
    }
12080
423k
    expr_ty _res = NULL;
12081
423k
    int _mark = p->mark;
12082
423k
    { // assignment_expression
12083
423k
        if (p->error_indicator) {
12084
0
            p->level--;
12085
0
            return NULL;
12086
0
        }
12087
423k
        D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
12088
423k
        expr_ty assignment_expression_var;
12089
423k
        if (
12090
423k
            (assignment_expression_var = assignment_expression_rule(p))  // assignment_expression
12091
423k
        )
12092
569
        {
12093
569
            D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
12094
569
            _res = assignment_expression_var;
12095
569
            goto done;
12096
569
        }
12097
423k
        p->mark = _mark;
12098
423k
        D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ',
12099
423k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression"));
12100
423k
    }
12101
423k
    if (p->call_invalid_rules) { // invalid_named_expression
12102
228k
        if (p->error_indicator) {
12103
231
            p->level--;
12104
231
            return NULL;
12105
231
        }
12106
227k
        D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_named_expression"));
12107
227k
        void *invalid_named_expression_var;
12108
227k
        if (
12109
227k
            (invalid_named_expression_var = invalid_named_expression_rule(p))  // invalid_named_expression
12110
227k
        )
12111
0
        {
12112
0
            D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_named_expression"));
12113
0
            _res = invalid_named_expression_var;
12114
0
            goto done;
12115
0
        }
12116
227k
        p->mark = _mark;
12117
227k
        D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ',
12118
227k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_named_expression"));
12119
227k
    }
12120
422k
    { // expression !':='
12121
422k
        if (p->error_indicator) {
12122
14.5k
            p->level--;
12123
14.5k
            return NULL;
12124
14.5k
        }
12125
408k
        D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='"));
12126
408k
        expr_ty expression_var;
12127
408k
        if (
12128
408k
            (expression_var = expression_rule(p))  // expression
12129
408k
            &&
12130
408k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53)  // token=':='
12131
408k
        )
12132
230k
        {
12133
230k
            D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='"));
12134
230k
            _res = expression_var;
12135
230k
            goto done;
12136
230k
        }
12137
177k
        p->mark = _mark;
12138
177k
        D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ',
12139
177k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='"));
12140
177k
    }
12141
0
    _res = NULL;
12142
408k
  done:
12143
408k
    p->level--;
12144
408k
    return _res;
12145
177k
}
12146
12147
// disjunction: conjunction (('or' conjunction))+ | conjunction
12148
static expr_ty
12149
disjunction_rule(Parser *p)
12150
1.85M
{
12151
1.85M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12152
1
        _Pypegen_stack_overflow(p);
12153
1
    }
12154
1.85M
    if (p->error_indicator) {
12155
25
        p->level--;
12156
25
        return NULL;
12157
25
    }
12158
1.85M
    expr_ty _res = NULL;
12159
1.85M
    if (_PyPegen_is_memoized(p, disjunction_type, &_res)) {
12160
1.22M
        p->level--;
12161
1.22M
        return _res;
12162
1.22M
    }
12163
631k
    int _mark = p->mark;
12164
631k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
12165
0
        p->error_indicator = 1;
12166
0
        p->level--;
12167
0
        return NULL;
12168
0
    }
12169
631k
    int _start_lineno = p->tokens[_mark]->lineno;
12170
631k
    UNUSED(_start_lineno); // Only used by EXTRA macro
12171
631k
    int _start_col_offset = p->tokens[_mark]->col_offset;
12172
631k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
12173
631k
    { // conjunction (('or' conjunction))+
12174
631k
        if (p->error_indicator) {
12175
0
            p->level--;
12176
0
            return NULL;
12177
0
        }
12178
631k
        D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+"));
12179
631k
        expr_ty a;
12180
631k
        asdl_seq * b;
12181
631k
        if (
12182
631k
            (a = conjunction_rule(p))  // conjunction
12183
631k
            &&
12184
631k
            (b = _loop1_59_rule(p))  // (('or' conjunction))+
12185
631k
        )
12186
1.20k
        {
12187
1.20k
            D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+"));
12188
1.20k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12189
1.20k
            if (_token == NULL) {
12190
0
                p->level--;
12191
0
                return NULL;
12192
0
            }
12193
1.20k
            int _end_lineno = _token->end_lineno;
12194
1.20k
            UNUSED(_end_lineno); // Only used by EXTRA macro
12195
1.20k
            int _end_col_offset = _token->end_col_offset;
12196
1.20k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
12197
1.20k
            _res = _PyAST_BoolOp ( Or , CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
12198
1.20k
            if (_res == NULL && PyErr_Occurred()) {
12199
0
                p->error_indicator = 1;
12200
0
                p->level--;
12201
0
                return NULL;
12202
0
            }
12203
1.20k
            goto done;
12204
1.20k
        }
12205
629k
        p->mark = _mark;
12206
629k
        D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ',
12207
629k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction (('or' conjunction))+"));
12208
629k
    }
12209
0
    { // conjunction
12210
629k
        if (p->error_indicator) {
12211
34.6k
            p->level--;
12212
34.6k
            return NULL;
12213
34.6k
        }
12214
595k
        D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction"));
12215
595k
        expr_ty conjunction_var;
12216
595k
        if (
12217
595k
            (conjunction_var = conjunction_rule(p))  // conjunction
12218
595k
        )
12219
347k
        {
12220
347k
            D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction"));
12221
347k
            _res = conjunction_var;
12222
347k
            goto done;
12223
347k
        }
12224
247k
        p->mark = _mark;
12225
247k
        D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ',
12226
247k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction"));
12227
247k
    }
12228
0
    _res = NULL;
12229
596k
  done:
12230
596k
    _PyPegen_insert_memo(p, _mark, disjunction_type, _res);
12231
596k
    p->level--;
12232
596k
    return _res;
12233
247k
}
12234
12235
// conjunction: inversion (('and' inversion))+ | inversion
12236
static expr_ty
12237
conjunction_rule(Parser *p)
12238
1.23M
{
12239
1.23M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12240
1
        _Pypegen_stack_overflow(p);
12241
1
    }
12242
1.23M
    if (p->error_indicator) {
12243
1
        p->level--;
12244
1
        return NULL;
12245
1
    }
12246
1.23M
    expr_ty _res = NULL;
12247
1.23M
    if (_PyPegen_is_memoized(p, conjunction_type, &_res)) {
12248
595k
        p->level--;
12249
595k
        return _res;
12250
595k
    }
12251
635k
    int _mark = p->mark;
12252
635k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
12253
0
        p->error_indicator = 1;
12254
0
        p->level--;
12255
0
        return NULL;
12256
0
    }
12257
635k
    int _start_lineno = p->tokens[_mark]->lineno;
12258
635k
    UNUSED(_start_lineno); // Only used by EXTRA macro
12259
635k
    int _start_col_offset = p->tokens[_mark]->col_offset;
12260
635k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
12261
635k
    { // inversion (('and' inversion))+
12262
635k
        if (p->error_indicator) {
12263
0
            p->level--;
12264
0
            return NULL;
12265
0
        }
12266
635k
        D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+"));
12267
635k
        expr_ty a;
12268
635k
        asdl_seq * b;
12269
635k
        if (
12270
635k
            (a = inversion_rule(p))  // inversion
12271
635k
            &&
12272
635k
            (b = _loop1_60_rule(p))  // (('and' inversion))+
12273
635k
        )
12274
1.48k
        {
12275
1.48k
            D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+"));
12276
1.48k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12277
1.48k
            if (_token == NULL) {
12278
0
                p->level--;
12279
0
                return NULL;
12280
0
            }
12281
1.48k
            int _end_lineno = _token->end_lineno;
12282
1.48k
            UNUSED(_end_lineno); // Only used by EXTRA macro
12283
1.48k
            int _end_col_offset = _token->end_col_offset;
12284
1.48k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
12285
1.48k
            _res = _PyAST_BoolOp ( And , CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
12286
1.48k
            if (_res == NULL && PyErr_Occurred()) {
12287
0
                p->error_indicator = 1;
12288
0
                p->level--;
12289
0
                return NULL;
12290
0
            }
12291
1.48k
            goto done;
12292
1.48k
        }
12293
633k
        p->mark = _mark;
12294
633k
        D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ',
12295
633k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion (('and' inversion))+"));
12296
633k
    }
12297
0
    { // inversion
12298
633k
        if (p->error_indicator) {
12299
34.6k
            p->level--;
12300
34.6k
            return NULL;
12301
34.6k
        }
12302
599k
        D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion"));
12303
599k
        expr_ty inversion_var;
12304
599k
        if (
12305
599k
            (inversion_var = inversion_rule(p))  // inversion
12306
599k
        )
12307
351k
        {
12308
351k
            D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion"));
12309
351k
            _res = inversion_var;
12310
351k
            goto done;
12311
351k
        }
12312
247k
        p->mark = _mark;
12313
247k
        D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ',
12314
247k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion"));
12315
247k
    }
12316
0
    _res = NULL;
12317
600k
  done:
12318
600k
    _PyPegen_insert_memo(p, _mark, conjunction_type, _res);
12319
600k
    p->level--;
12320
600k
    return _res;
12321
247k
}
12322
12323
// inversion: 'not' inversion | comparison
12324
static expr_ty
12325
inversion_rule(Parser *p)
12326
1.23M
{
12327
1.23M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12328
1
        _Pypegen_stack_overflow(p);
12329
1
    }
12330
1.23M
    if (p->error_indicator) {
12331
1
        p->level--;
12332
1
        return NULL;
12333
1
    }
12334
1.23M
    expr_ty _res = NULL;
12335
1.23M
    if (_PyPegen_is_memoized(p, inversion_type, &_res)) {
12336
599k
        p->level--;
12337
599k
        return _res;
12338
599k
    }
12339
640k
    int _mark = p->mark;
12340
640k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
12341
0
        p->error_indicator = 1;
12342
0
        p->level--;
12343
0
        return NULL;
12344
0
    }
12345
640k
    int _start_lineno = p->tokens[_mark]->lineno;
12346
640k
    UNUSED(_start_lineno); // Only used by EXTRA macro
12347
640k
    int _start_col_offset = p->tokens[_mark]->col_offset;
12348
640k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
12349
640k
    { // 'not' inversion
12350
640k
        if (p->error_indicator) {
12351
0
            p->level--;
12352
0
            return NULL;
12353
0
        }
12354
640k
        D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' inversion"));
12355
640k
        Token * _keyword;
12356
640k
        expr_ty a;
12357
640k
        if (
12358
640k
            (_keyword = _PyPegen_expect_token(p, 708))  // token='not'
12359
640k
            &&
12360
640k
            (a = inversion_rule(p))  // inversion
12361
640k
        )
12362
1.50k
        {
12363
1.50k
            D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' inversion"));
12364
1.50k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12365
1.50k
            if (_token == NULL) {
12366
0
                p->level--;
12367
0
                return NULL;
12368
0
            }
12369
1.50k
            int _end_lineno = _token->end_lineno;
12370
1.50k
            UNUSED(_end_lineno); // Only used by EXTRA macro
12371
1.50k
            int _end_col_offset = _token->end_col_offset;
12372
1.50k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
12373
1.50k
            _res = _PyAST_UnaryOp ( Not , a , EXTRA );
12374
1.50k
            if (_res == NULL && PyErr_Occurred()) {
12375
0
                p->error_indicator = 1;
12376
0
                p->level--;
12377
0
                return NULL;
12378
0
            }
12379
1.50k
            goto done;
12380
1.50k
        }
12381
638k
        p->mark = _mark;
12382
638k
        D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ',
12383
638k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' inversion"));
12384
638k
    }
12385
0
    { // comparison
12386
638k
        if (p->error_indicator) {
12387
212
            p->level--;
12388
212
            return NULL;
12389
212
        }
12390
638k
        D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "comparison"));
12391
638k
        expr_ty comparison_var;
12392
638k
        if (
12393
638k
            (comparison_var = comparison_rule(p))  // comparison
12394
638k
        )
12395
355k
        {
12396
355k
            D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "comparison"));
12397
355k
            _res = comparison_var;
12398
355k
            goto done;
12399
355k
        }
12400
282k
        p->mark = _mark;
12401
282k
        D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ',
12402
282k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "comparison"));
12403
282k
    }
12404
0
    _res = NULL;
12405
639k
  done:
12406
639k
    _PyPegen_insert_memo(p, _mark, inversion_type, _res);
12407
639k
    p->level--;
12408
639k
    return _res;
12409
282k
}
12410
12411
// comparison: bitwise_or compare_op_bitwise_or_pair+ | bitwise_or
12412
static expr_ty
12413
comparison_rule(Parser *p)
12414
638k
{
12415
638k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12416
1
        _Pypegen_stack_overflow(p);
12417
1
    }
12418
638k
    if (p->error_indicator) {
12419
1
        p->level--;
12420
1
        return NULL;
12421
1
    }
12422
638k
    expr_ty _res = NULL;
12423
638k
    int _mark = p->mark;
12424
638k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
12425
0
        p->error_indicator = 1;
12426
0
        p->level--;
12427
0
        return NULL;
12428
0
    }
12429
638k
    int _start_lineno = p->tokens[_mark]->lineno;
12430
638k
    UNUSED(_start_lineno); // Only used by EXTRA macro
12431
638k
    int _start_col_offset = p->tokens[_mark]->col_offset;
12432
638k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
12433
638k
    { // bitwise_or compare_op_bitwise_or_pair+
12434
638k
        if (p->error_indicator) {
12435
0
            p->level--;
12436
0
            return NULL;
12437
0
        }
12438
638k
        D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
12439
638k
        expr_ty a;
12440
638k
        asdl_seq * b;
12441
638k
        if (
12442
638k
            (a = bitwise_or_rule(p))  // bitwise_or
12443
638k
            &&
12444
638k
            (b = _loop1_61_rule(p))  // compare_op_bitwise_or_pair+
12445
638k
        )
12446
9.75k
        {
12447
9.75k
            D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
12448
9.75k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12449
9.75k
            if (_token == NULL) {
12450
0
                p->level--;
12451
0
                return NULL;
12452
0
            }
12453
9.75k
            int _end_lineno = _token->end_lineno;
12454
9.75k
            UNUSED(_end_lineno); // Only used by EXTRA macro
12455
9.75k
            int _end_col_offset = _token->end_col_offset;
12456
9.75k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
12457
9.75k
            _res = _PyAST_Compare ( a , CHECK ( asdl_int_seq* , _PyPegen_get_cmpops ( p , b ) ) , CHECK ( asdl_expr_seq* , _PyPegen_get_exprs ( p , b ) ) , EXTRA );
12458
9.75k
            if (_res == NULL && PyErr_Occurred()) {
12459
0
                p->error_indicator = 1;
12460
0
                p->level--;
12461
0
                return NULL;
12462
0
            }
12463
9.75k
            goto done;
12464
9.75k
        }
12465
628k
        p->mark = _mark;
12466
628k
        D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ',
12467
628k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
12468
628k
    }
12469
0
    { // bitwise_or
12470
628k
        if (p->error_indicator) {
12471
34.6k
            p->level--;
12472
34.6k
            return NULL;
12473
34.6k
        }
12474
593k
        D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or"));
12475
593k
        expr_ty bitwise_or_var;
12476
593k
        if (
12477
593k
            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
12478
593k
        )
12479
345k
        {
12480
345k
            D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or"));
12481
345k
            _res = bitwise_or_var;
12482
345k
            goto done;
12483
345k
        }
12484
247k
        p->mark = _mark;
12485
247k
        D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ',
12486
247k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or"));
12487
247k
    }
12488
0
    _res = NULL;
12489
603k
  done:
12490
603k
    p->level--;
12491
603k
    return _res;
12492
247k
}
12493
12494
// compare_op_bitwise_or_pair:
12495
//     | eq_bitwise_or
12496
//     | noteq_bitwise_or
12497
//     | lte_bitwise_or
12498
//     | lt_bitwise_or
12499
//     | gte_bitwise_or
12500
//     | gt_bitwise_or
12501
//     | notin_bitwise_or
12502
//     | in_bitwise_or
12503
//     | isnot_bitwise_or
12504
//     | is_bitwise_or
12505
static CmpopExprPair*
12506
compare_op_bitwise_or_pair_rule(Parser *p)
12507
377k
{
12508
377k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12509
0
        _Pypegen_stack_overflow(p);
12510
0
    }
12511
377k
    if (p->error_indicator) {
12512
0
        p->level--;
12513
0
        return NULL;
12514
0
    }
12515
377k
    CmpopExprPair* _res = NULL;
12516
377k
    int _mark = p->mark;
12517
377k
    { // eq_bitwise_or
12518
377k
        if (p->error_indicator) {
12519
0
            p->level--;
12520
0
            return NULL;
12521
0
        }
12522
377k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "eq_bitwise_or"));
12523
377k
        CmpopExprPair* eq_bitwise_or_var;
12524
377k
        if (
12525
377k
            (eq_bitwise_or_var = eq_bitwise_or_rule(p))  // eq_bitwise_or
12526
377k
        )
12527
1.65k
        {
12528
1.65k
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "eq_bitwise_or"));
12529
1.65k
            _res = eq_bitwise_or_var;
12530
1.65k
            goto done;
12531
1.65k
        }
12532
375k
        p->mark = _mark;
12533
375k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12534
375k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "eq_bitwise_or"));
12535
375k
    }
12536
0
    { // noteq_bitwise_or
12537
375k
        if (p->error_indicator) {
12538
72
            p->level--;
12539
72
            return NULL;
12540
72
        }
12541
375k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "noteq_bitwise_or"));
12542
375k
        CmpopExprPair* noteq_bitwise_or_var;
12543
375k
        if (
12544
375k
            (noteq_bitwise_or_var = noteq_bitwise_or_rule(p))  // noteq_bitwise_or
12545
375k
        )
12546
709
        {
12547
709
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "noteq_bitwise_or"));
12548
709
            _res = noteq_bitwise_or_var;
12549
709
            goto done;
12550
709
        }
12551
374k
        p->mark = _mark;
12552
374k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12553
374k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "noteq_bitwise_or"));
12554
374k
    }
12555
0
    { // lte_bitwise_or
12556
374k
        if (p->error_indicator) {
12557
261
            p->level--;
12558
261
            return NULL;
12559
261
        }
12560
374k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lte_bitwise_or"));
12561
374k
        CmpopExprPair* lte_bitwise_or_var;
12562
374k
        if (
12563
374k
            (lte_bitwise_or_var = lte_bitwise_or_rule(p))  // lte_bitwise_or
12564
374k
        )
12565
564
        {
12566
564
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lte_bitwise_or"));
12567
564
            _res = lte_bitwise_or_var;
12568
564
            goto done;
12569
564
        }
12570
373k
        p->mark = _mark;
12571
373k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12572
373k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lte_bitwise_or"));
12573
373k
    }
12574
0
    { // lt_bitwise_or
12575
373k
        if (p->error_indicator) {
12576
197
            p->level--;
12577
197
            return NULL;
12578
197
        }
12579
373k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lt_bitwise_or"));
12580
373k
        CmpopExprPair* lt_bitwise_or_var;
12581
373k
        if (
12582
373k
            (lt_bitwise_or_var = lt_bitwise_or_rule(p))  // lt_bitwise_or
12583
373k
        )
12584
2.86k
        {
12585
2.86k
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lt_bitwise_or"));
12586
2.86k
            _res = lt_bitwise_or_var;
12587
2.86k
            goto done;
12588
2.86k
        }
12589
370k
        p->mark = _mark;
12590
370k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12591
370k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lt_bitwise_or"));
12592
370k
    }
12593
0
    { // gte_bitwise_or
12594
370k
        if (p->error_indicator) {
12595
92
            p->level--;
12596
92
            return NULL;
12597
92
        }
12598
370k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gte_bitwise_or"));
12599
370k
        CmpopExprPair* gte_bitwise_or_var;
12600
370k
        if (
12601
370k
            (gte_bitwise_or_var = gte_bitwise_or_rule(p))  // gte_bitwise_or
12602
370k
        )
12603
659
        {
12604
659
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "gte_bitwise_or"));
12605
659
            _res = gte_bitwise_or_var;
12606
659
            goto done;
12607
659
        }
12608
370k
        p->mark = _mark;
12609
370k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12610
370k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "gte_bitwise_or"));
12611
370k
    }
12612
0
    { // gt_bitwise_or
12613
370k
        if (p->error_indicator) {
12614
68
            p->level--;
12615
68
            return NULL;
12616
68
        }
12617
370k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gt_bitwise_or"));
12618
370k
        CmpopExprPair* gt_bitwise_or_var;
12619
370k
        if (
12620
370k
            (gt_bitwise_or_var = gt_bitwise_or_rule(p))  // gt_bitwise_or
12621
370k
        )
12622
7.94k
        {
12623
7.94k
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "gt_bitwise_or"));
12624
7.94k
            _res = gt_bitwise_or_var;
12625
7.94k
            goto done;
12626
7.94k
        }
12627
362k
        p->mark = _mark;
12628
362k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12629
362k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "gt_bitwise_or"));
12630
362k
    }
12631
0
    { // notin_bitwise_or
12632
362k
        if (p->error_indicator) {
12633
417
            p->level--;
12634
417
            return NULL;
12635
417
        }
12636
361k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "notin_bitwise_or"));
12637
361k
        CmpopExprPair* notin_bitwise_or_var;
12638
361k
        if (
12639
361k
            (notin_bitwise_or_var = notin_bitwise_or_rule(p))  // notin_bitwise_or
12640
361k
        )
12641
667
        {
12642
667
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "notin_bitwise_or"));
12643
667
            _res = notin_bitwise_or_var;
12644
667
            goto done;
12645
667
        }
12646
361k
        p->mark = _mark;
12647
361k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12648
361k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "notin_bitwise_or"));
12649
361k
    }
12650
0
    { // in_bitwise_or
12651
361k
        if (p->error_indicator) {
12652
145
            p->level--;
12653
145
            return NULL;
12654
145
        }
12655
360k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "in_bitwise_or"));
12656
360k
        CmpopExprPair* in_bitwise_or_var;
12657
360k
        if (
12658
360k
            (in_bitwise_or_var = in_bitwise_or_rule(p))  // in_bitwise_or
12659
360k
        )
12660
1.36k
        {
12661
1.36k
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "in_bitwise_or"));
12662
1.36k
            _res = in_bitwise_or_var;
12663
1.36k
            goto done;
12664
1.36k
        }
12665
359k
        p->mark = _mark;
12666
359k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12667
359k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "in_bitwise_or"));
12668
359k
    }
12669
0
    { // isnot_bitwise_or
12670
359k
        if (p->error_indicator) {
12671
504
            p->level--;
12672
504
            return NULL;
12673
504
        }
12674
359k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "isnot_bitwise_or"));
12675
359k
        CmpopExprPair* isnot_bitwise_or_var;
12676
359k
        if (
12677
359k
            (isnot_bitwise_or_var = isnot_bitwise_or_rule(p))  // isnot_bitwise_or
12678
359k
        )
12679
699
        {
12680
699
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "isnot_bitwise_or"));
12681
699
            _res = isnot_bitwise_or_var;
12682
699
            goto done;
12683
699
        }
12684
358k
        p->mark = _mark;
12685
358k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12686
358k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "isnot_bitwise_or"));
12687
358k
    }
12688
0
    { // is_bitwise_or
12689
358k
        if (p->error_indicator) {
12690
261
            p->level--;
12691
261
            return NULL;
12692
261
        }
12693
358k
        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "is_bitwise_or"));
12694
358k
        CmpopExprPair* is_bitwise_or_var;
12695
358k
        if (
12696
358k
            (is_bitwise_or_var = is_bitwise_or_rule(p))  // is_bitwise_or
12697
358k
        )
12698
2.31k
        {
12699
2.31k
            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "is_bitwise_or"));
12700
2.31k
            _res = is_bitwise_or_var;
12701
2.31k
            goto done;
12702
2.31k
        }
12703
355k
        p->mark = _mark;
12704
355k
        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12705
355k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "is_bitwise_or"));
12706
355k
    }
12707
0
    _res = NULL;
12708
375k
  done:
12709
375k
    p->level--;
12710
375k
    return _res;
12711
355k
}
12712
12713
// eq_bitwise_or: '==' bitwise_or
12714
static CmpopExprPair*
12715
eq_bitwise_or_rule(Parser *p)
12716
377k
{
12717
377k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12718
0
        _Pypegen_stack_overflow(p);
12719
0
    }
12720
377k
    if (p->error_indicator) {
12721
0
        p->level--;
12722
0
        return NULL;
12723
0
    }
12724
377k
    CmpopExprPair* _res = NULL;
12725
377k
    int _mark = p->mark;
12726
377k
    { // '==' bitwise_or
12727
377k
        if (p->error_indicator) {
12728
0
            p->level--;
12729
0
            return NULL;
12730
0
        }
12731
377k
        D(fprintf(stderr, "%*c> eq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or"));
12732
377k
        Token * _literal;
12733
377k
        expr_ty a;
12734
377k
        if (
12735
377k
            (_literal = _PyPegen_expect_token(p, 27))  // token='=='
12736
377k
            &&
12737
377k
            (a = bitwise_or_rule(p))  // bitwise_or
12738
377k
        )
12739
1.65k
        {
12740
1.65k
            D(fprintf(stderr, "%*c+ eq_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or"));
12741
1.65k
            _res = _PyPegen_cmpop_expr_pair ( p , Eq , a );
12742
1.65k
            if (_res == NULL && PyErr_Occurred()) {
12743
0
                p->error_indicator = 1;
12744
0
                p->level--;
12745
0
                return NULL;
12746
0
            }
12747
1.65k
            goto done;
12748
1.65k
        }
12749
375k
        p->mark = _mark;
12750
375k
        D(fprintf(stderr, "%*c%s eq_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
12751
375k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'==' bitwise_or"));
12752
375k
    }
12753
0
    _res = NULL;
12754
377k
  done:
12755
377k
    p->level--;
12756
377k
    return _res;
12757
375k
}
12758
12759
// noteq_bitwise_or: ('!=') bitwise_or
12760
static CmpopExprPair*
12761
noteq_bitwise_or_rule(Parser *p)
12762
375k
{
12763
375k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12764
0
        _Pypegen_stack_overflow(p);
12765
0
    }
12766
375k
    if (p->error_indicator) {
12767
0
        p->level--;
12768
0
        return NULL;
12769
0
    }
12770
375k
    CmpopExprPair* _res = NULL;
12771
375k
    int _mark = p->mark;
12772
375k
    { // ('!=') bitwise_or
12773
375k
        if (p->error_indicator) {
12774
0
            p->level--;
12775
0
            return NULL;
12776
0
        }
12777
375k
        D(fprintf(stderr, "%*c> noteq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or"));
12778
375k
        void *_tmp_62_var;
12779
375k
        expr_ty a;
12780
375k
        if (
12781
375k
            (_tmp_62_var = _tmp_62_rule(p))  // '!='
12782
375k
            &&
12783
375k
            (a = bitwise_or_rule(p))  // bitwise_or
12784
375k
        )
12785
709
        {
12786
709
            D(fprintf(stderr, "%*c+ noteq_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or"));
12787
709
            _res = _PyPegen_cmpop_expr_pair ( p , NotEq , a );
12788
709
            if (_res == NULL && PyErr_Occurred()) {
12789
0
                p->error_indicator = 1;
12790
0
                p->level--;
12791
0
                return NULL;
12792
0
            }
12793
709
            goto done;
12794
709
        }
12795
374k
        p->mark = _mark;
12796
374k
        D(fprintf(stderr, "%*c%s noteq_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
12797
374k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('!=') bitwise_or"));
12798
374k
    }
12799
0
    _res = NULL;
12800
375k
  done:
12801
375k
    p->level--;
12802
375k
    return _res;
12803
374k
}
12804
12805
// lte_bitwise_or: '<=' bitwise_or
12806
static CmpopExprPair*
12807
lte_bitwise_or_rule(Parser *p)
12808
374k
{
12809
374k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12810
0
        _Pypegen_stack_overflow(p);
12811
0
    }
12812
374k
    if (p->error_indicator) {
12813
0
        p->level--;
12814
0
        return NULL;
12815
0
    }
12816
374k
    CmpopExprPair* _res = NULL;
12817
374k
    int _mark = p->mark;
12818
374k
    { // '<=' bitwise_or
12819
374k
        if (p->error_indicator) {
12820
0
            p->level--;
12821
0
            return NULL;
12822
0
        }
12823
374k
        D(fprintf(stderr, "%*c> lte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or"));
12824
374k
        Token * _literal;
12825
374k
        expr_ty a;
12826
374k
        if (
12827
374k
            (_literal = _PyPegen_expect_token(p, 29))  // token='<='
12828
374k
            &&
12829
374k
            (a = bitwise_or_rule(p))  // bitwise_or
12830
374k
        )
12831
564
        {
12832
564
            D(fprintf(stderr, "%*c+ lte_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or"));
12833
564
            _res = _PyPegen_cmpop_expr_pair ( p , LtE , a );
12834
564
            if (_res == NULL && PyErr_Occurred()) {
12835
0
                p->error_indicator = 1;
12836
0
                p->level--;
12837
0
                return NULL;
12838
0
            }
12839
564
            goto done;
12840
564
        }
12841
373k
        p->mark = _mark;
12842
373k
        D(fprintf(stderr, "%*c%s lte_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
12843
373k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<=' bitwise_or"));
12844
373k
    }
12845
0
    _res = NULL;
12846
374k
  done:
12847
374k
    p->level--;
12848
374k
    return _res;
12849
373k
}
12850
12851
// lt_bitwise_or: '<' bitwise_or
12852
static CmpopExprPair*
12853
lt_bitwise_or_rule(Parser *p)
12854
373k
{
12855
373k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12856
0
        _Pypegen_stack_overflow(p);
12857
0
    }
12858
373k
    if (p->error_indicator) {
12859
0
        p->level--;
12860
0
        return NULL;
12861
0
    }
12862
373k
    CmpopExprPair* _res = NULL;
12863
373k
    int _mark = p->mark;
12864
373k
    { // '<' bitwise_or
12865
373k
        if (p->error_indicator) {
12866
0
            p->level--;
12867
0
            return NULL;
12868
0
        }
12869
373k
        D(fprintf(stderr, "%*c> lt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or"));
12870
373k
        Token * _literal;
12871
373k
        expr_ty a;
12872
373k
        if (
12873
373k
            (_literal = _PyPegen_expect_token(p, 20))  // token='<'
12874
373k
            &&
12875
373k
            (a = bitwise_or_rule(p))  // bitwise_or
12876
373k
        )
12877
2.86k
        {
12878
2.86k
            D(fprintf(stderr, "%*c+ lt_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or"));
12879
2.86k
            _res = _PyPegen_cmpop_expr_pair ( p , Lt , a );
12880
2.86k
            if (_res == NULL && PyErr_Occurred()) {
12881
0
                p->error_indicator = 1;
12882
0
                p->level--;
12883
0
                return NULL;
12884
0
            }
12885
2.86k
            goto done;
12886
2.86k
        }
12887
370k
        p->mark = _mark;
12888
370k
        D(fprintf(stderr, "%*c%s lt_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
12889
370k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<' bitwise_or"));
12890
370k
    }
12891
0
    _res = NULL;
12892
373k
  done:
12893
373k
    p->level--;
12894
373k
    return _res;
12895
370k
}
12896
12897
// gte_bitwise_or: '>=' bitwise_or
12898
static CmpopExprPair*
12899
gte_bitwise_or_rule(Parser *p)
12900
370k
{
12901
370k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12902
0
        _Pypegen_stack_overflow(p);
12903
0
    }
12904
370k
    if (p->error_indicator) {
12905
0
        p->level--;
12906
0
        return NULL;
12907
0
    }
12908
370k
    CmpopExprPair* _res = NULL;
12909
370k
    int _mark = p->mark;
12910
370k
    { // '>=' bitwise_or
12911
370k
        if (p->error_indicator) {
12912
0
            p->level--;
12913
0
            return NULL;
12914
0
        }
12915
370k
        D(fprintf(stderr, "%*c> gte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or"));
12916
370k
        Token * _literal;
12917
370k
        expr_ty a;
12918
370k
        if (
12919
370k
            (_literal = _PyPegen_expect_token(p, 30))  // token='>='
12920
370k
            &&
12921
370k
            (a = bitwise_or_rule(p))  // bitwise_or
12922
370k
        )
12923
659
        {
12924
659
            D(fprintf(stderr, "%*c+ gte_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or"));
12925
659
            _res = _PyPegen_cmpop_expr_pair ( p , GtE , a );
12926
659
            if (_res == NULL && PyErr_Occurred()) {
12927
0
                p->error_indicator = 1;
12928
0
                p->level--;
12929
0
                return NULL;
12930
0
            }
12931
659
            goto done;
12932
659
        }
12933
370k
        p->mark = _mark;
12934
370k
        D(fprintf(stderr, "%*c%s gte_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
12935
370k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>=' bitwise_or"));
12936
370k
    }
12937
0
    _res = NULL;
12938
370k
  done:
12939
370k
    p->level--;
12940
370k
    return _res;
12941
370k
}
12942
12943
// gt_bitwise_or: '>' bitwise_or
12944
static CmpopExprPair*
12945
gt_bitwise_or_rule(Parser *p)
12946
370k
{
12947
370k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12948
0
        _Pypegen_stack_overflow(p);
12949
0
    }
12950
370k
    if (p->error_indicator) {
12951
0
        p->level--;
12952
0
        return NULL;
12953
0
    }
12954
370k
    CmpopExprPair* _res = NULL;
12955
370k
    int _mark = p->mark;
12956
370k
    { // '>' bitwise_or
12957
370k
        if (p->error_indicator) {
12958
0
            p->level--;
12959
0
            return NULL;
12960
0
        }
12961
370k
        D(fprintf(stderr, "%*c> gt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or"));
12962
370k
        Token * _literal;
12963
370k
        expr_ty a;
12964
370k
        if (
12965
370k
            (_literal = _PyPegen_expect_token(p, 21))  // token='>'
12966
370k
            &&
12967
370k
            (a = bitwise_or_rule(p))  // bitwise_or
12968
370k
        )
12969
7.94k
        {
12970
7.94k
            D(fprintf(stderr, "%*c+ gt_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or"));
12971
7.94k
            _res = _PyPegen_cmpop_expr_pair ( p , Gt , a );
12972
7.94k
            if (_res == NULL && PyErr_Occurred()) {
12973
0
                p->error_indicator = 1;
12974
0
                p->level--;
12975
0
                return NULL;
12976
0
            }
12977
7.94k
            goto done;
12978
7.94k
        }
12979
362k
        p->mark = _mark;
12980
362k
        D(fprintf(stderr, "%*c%s gt_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
12981
362k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>' bitwise_or"));
12982
362k
    }
12983
0
    _res = NULL;
12984
370k
  done:
12985
370k
    p->level--;
12986
370k
    return _res;
12987
362k
}
12988
12989
// notin_bitwise_or: 'not' 'in' bitwise_or
12990
static CmpopExprPair*
12991
notin_bitwise_or_rule(Parser *p)
12992
361k
{
12993
361k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
12994
0
        _Pypegen_stack_overflow(p);
12995
0
    }
12996
361k
    if (p->error_indicator) {
12997
0
        p->level--;
12998
0
        return NULL;
12999
0
    }
13000
361k
    CmpopExprPair* _res = NULL;
13001
361k
    int _mark = p->mark;
13002
361k
    { // 'not' 'in' bitwise_or
13003
361k
        if (p->error_indicator) {
13004
0
            p->level--;
13005
0
            return NULL;
13006
0
        }
13007
361k
        D(fprintf(stderr, "%*c> notin_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or"));
13008
361k
        Token * _keyword;
13009
361k
        Token * _keyword_1;
13010
361k
        expr_ty a;
13011
361k
        if (
13012
361k
            (_keyword = _PyPegen_expect_token(p, 708))  // token='not'
13013
361k
            &&
13014
361k
            (_keyword_1 = _PyPegen_expect_token(p, 700))  // token='in'
13015
361k
            &&
13016
361k
            (a = bitwise_or_rule(p))  // bitwise_or
13017
361k
        )
13018
667
        {
13019
667
            D(fprintf(stderr, "%*c+ notin_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or"));
13020
667
            _res = _PyPegen_cmpop_expr_pair ( p , NotIn , a );
13021
667
            if (_res == NULL && PyErr_Occurred()) {
13022
0
                p->error_indicator = 1;
13023
0
                p->level--;
13024
0
                return NULL;
13025
0
            }
13026
667
            goto done;
13027
667
        }
13028
361k
        p->mark = _mark;
13029
361k
        D(fprintf(stderr, "%*c%s notin_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
13030
361k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' 'in' bitwise_or"));
13031
361k
    }
13032
0
    _res = NULL;
13033
361k
  done:
13034
361k
    p->level--;
13035
361k
    return _res;
13036
361k
}
13037
13038
// in_bitwise_or: 'in' bitwise_or
13039
static CmpopExprPair*
13040
in_bitwise_or_rule(Parser *p)
13041
360k
{
13042
360k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13043
0
        _Pypegen_stack_overflow(p);
13044
0
    }
13045
360k
    if (p->error_indicator) {
13046
0
        p->level--;
13047
0
        return NULL;
13048
0
    }
13049
360k
    CmpopExprPair* _res = NULL;
13050
360k
    int _mark = p->mark;
13051
360k
    { // 'in' bitwise_or
13052
360k
        if (p->error_indicator) {
13053
0
            p->level--;
13054
0
            return NULL;
13055
0
        }
13056
360k
        D(fprintf(stderr, "%*c> in_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or"));
13057
360k
        Token * _keyword;
13058
360k
        expr_ty a;
13059
360k
        if (
13060
360k
            (_keyword = _PyPegen_expect_token(p, 700))  // token='in'
13061
360k
            &&
13062
360k
            (a = bitwise_or_rule(p))  // bitwise_or
13063
360k
        )
13064
1.36k
        {
13065
1.36k
            D(fprintf(stderr, "%*c+ in_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or"));
13066
1.36k
            _res = _PyPegen_cmpop_expr_pair ( p , In , a );
13067
1.36k
            if (_res == NULL && PyErr_Occurred()) {
13068
0
                p->error_indicator = 1;
13069
0
                p->level--;
13070
0
                return NULL;
13071
0
            }
13072
1.36k
            goto done;
13073
1.36k
        }
13074
359k
        p->mark = _mark;
13075
359k
        D(fprintf(stderr, "%*c%s in_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
13076
359k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'in' bitwise_or"));
13077
359k
    }
13078
0
    _res = NULL;
13079
360k
  done:
13080
360k
    p->level--;
13081
360k
    return _res;
13082
359k
}
13083
13084
// isnot_bitwise_or: 'is' 'not' bitwise_or
13085
static CmpopExprPair*
13086
isnot_bitwise_or_rule(Parser *p)
13087
359k
{
13088
359k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13089
0
        _Pypegen_stack_overflow(p);
13090
0
    }
13091
359k
    if (p->error_indicator) {
13092
0
        p->level--;
13093
0
        return NULL;
13094
0
    }
13095
359k
    CmpopExprPair* _res = NULL;
13096
359k
    int _mark = p->mark;
13097
359k
    { // 'is' 'not' bitwise_or
13098
359k
        if (p->error_indicator) {
13099
0
            p->level--;
13100
0
            return NULL;
13101
0
        }
13102
359k
        D(fprintf(stderr, "%*c> isnot_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or"));
13103
359k
        Token * _keyword;
13104
359k
        Token * _keyword_1;
13105
359k
        expr_ty a;
13106
359k
        if (
13107
359k
            (_keyword = _PyPegen_expect_token(p, 597))  // token='is'
13108
359k
            &&
13109
359k
            (_keyword_1 = _PyPegen_expect_token(p, 708))  // token='not'
13110
359k
            &&
13111
359k
            (a = bitwise_or_rule(p))  // bitwise_or
13112
359k
        )
13113
699
        {
13114
699
            D(fprintf(stderr, "%*c+ isnot_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or"));
13115
699
            _res = _PyPegen_cmpop_expr_pair ( p , IsNot , a );
13116
699
            if (_res == NULL && PyErr_Occurred()) {
13117
0
                p->error_indicator = 1;
13118
0
                p->level--;
13119
0
                return NULL;
13120
0
            }
13121
699
            goto done;
13122
699
        }
13123
358k
        p->mark = _mark;
13124
358k
        D(fprintf(stderr, "%*c%s isnot_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
13125
358k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' 'not' bitwise_or"));
13126
358k
    }
13127
0
    _res = NULL;
13128
359k
  done:
13129
359k
    p->level--;
13130
359k
    return _res;
13131
358k
}
13132
13133
// is_bitwise_or: 'is' bitwise_or
13134
static CmpopExprPair*
13135
is_bitwise_or_rule(Parser *p)
13136
358k
{
13137
358k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13138
0
        _Pypegen_stack_overflow(p);
13139
0
    }
13140
358k
    if (p->error_indicator) {
13141
0
        p->level--;
13142
0
        return NULL;
13143
0
    }
13144
358k
    CmpopExprPair* _res = NULL;
13145
358k
    int _mark = p->mark;
13146
358k
    { // 'is' bitwise_or
13147
358k
        if (p->error_indicator) {
13148
0
            p->level--;
13149
0
            return NULL;
13150
0
        }
13151
358k
        D(fprintf(stderr, "%*c> is_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or"));
13152
358k
        Token * _keyword;
13153
358k
        expr_ty a;
13154
358k
        if (
13155
358k
            (_keyword = _PyPegen_expect_token(p, 597))  // token='is'
13156
358k
            &&
13157
358k
            (a = bitwise_or_rule(p))  // bitwise_or
13158
358k
        )
13159
2.31k
        {
13160
2.31k
            D(fprintf(stderr, "%*c+ is_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or"));
13161
2.31k
            _res = _PyPegen_cmpop_expr_pair ( p , Is , a );
13162
2.31k
            if (_res == NULL && PyErr_Occurred()) {
13163
0
                p->error_indicator = 1;
13164
0
                p->level--;
13165
0
                return NULL;
13166
0
            }
13167
2.31k
            goto done;
13168
2.31k
        }
13169
355k
        p->mark = _mark;
13170
355k
        D(fprintf(stderr, "%*c%s is_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
13171
355k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' bitwise_or"));
13172
355k
    }
13173
0
    _res = NULL;
13174
358k
  done:
13175
358k
    p->level--;
13176
358k
    return _res;
13177
355k
}
13178
13179
// Left-recursive
13180
// bitwise_or: bitwise_or '|' bitwise_xor | bitwise_xor
13181
static expr_ty bitwise_or_raw(Parser *);
13182
static expr_ty
13183
bitwise_or_rule(Parser *p)
13184
2.39M
{
13185
2.39M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13186
1
        _Pypegen_stack_overflow(p);
13187
1
    }
13188
2.39M
    expr_ty _res = NULL;
13189
2.39M
    if (_PyPegen_is_memoized(p, bitwise_or_type, &_res)) {
13190
1.72M
        p->level--;
13191
1.72M
        return _res;
13192
1.72M
    }
13193
670k
    int _mark = p->mark;
13194
670k
    int _resmark = p->mark;
13195
1.05M
    while (1) {
13196
1.05M
        int tmpvar_2 = _PyPegen_update_memo(p, _mark, bitwise_or_type, _res);
13197
1.05M
        if (tmpvar_2) {
13198
0
            p->level--;
13199
0
            return _res;
13200
0
        }
13201
1.05M
        p->mark = _mark;
13202
1.05M
        void *_raw = bitwise_or_raw(p);
13203
1.05M
        if (p->error_indicator) {
13204
36.5k
            p->level--;
13205
36.5k
            return NULL;
13206
36.5k
        }
13207
1.01M
        if (_raw == NULL || p->mark <= _resmark)
13208
633k
            break;
13209
382k
        _resmark = p->mark;
13210
382k
        _res = _raw;
13211
382k
    }
13212
633k
    p->mark = _resmark;
13213
633k
    p->level--;
13214
633k
    return _res;
13215
670k
}
13216
static expr_ty
13217
bitwise_or_raw(Parser *p)
13218
1.05M
{
13219
1.05M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13220
2
        _Pypegen_stack_overflow(p);
13221
2
    }
13222
1.05M
    if (p->error_indicator) {
13223
3
        p->level--;
13224
3
        return NULL;
13225
3
    }
13226
1.05M
    expr_ty _res = NULL;
13227
1.05M
    int _mark = p->mark;
13228
1.05M
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
13229
0
        p->error_indicator = 1;
13230
0
        p->level--;
13231
0
        return NULL;
13232
0
    }
13233
1.05M
    int _start_lineno = p->tokens[_mark]->lineno;
13234
1.05M
    UNUSED(_start_lineno); // Only used by EXTRA macro
13235
1.05M
    int _start_col_offset = p->tokens[_mark]->col_offset;
13236
1.05M
    UNUSED(_start_col_offset); // Only used by EXTRA macro
13237
1.05M
    { // bitwise_or '|' bitwise_xor
13238
1.05M
        if (p->error_indicator) {
13239
0
            p->level--;
13240
0
            return NULL;
13241
0
        }
13242
1.05M
        D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor"));
13243
1.05M
        Token * _literal;
13244
1.05M
        expr_ty a;
13245
1.05M
        expr_ty b;
13246
1.05M
        if (
13247
1.05M
            (a = bitwise_or_rule(p))  // bitwise_or
13248
1.05M
            &&
13249
1.05M
            (_literal = _PyPegen_expect_token(p, 18))  // token='|'
13250
1.05M
            &&
13251
1.05M
            (b = bitwise_xor_rule(p))  // bitwise_xor
13252
1.05M
        )
13253
761
        {
13254
761
            D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor"));
13255
761
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13256
761
            if (_token == NULL) {
13257
0
                p->level--;
13258
0
                return NULL;
13259
0
            }
13260
761
            int _end_lineno = _token->end_lineno;
13261
761
            UNUSED(_end_lineno); // Only used by EXTRA macro
13262
761
            int _end_col_offset = _token->end_col_offset;
13263
761
            UNUSED(_end_col_offset); // Only used by EXTRA macro
13264
761
            _res = _PyAST_BinOp ( a , BitOr , b , EXTRA );
13265
761
            if (_res == NULL && PyErr_Occurred()) {
13266
0
                p->error_indicator = 1;
13267
0
                p->level--;
13268
0
                return NULL;
13269
0
            }
13270
761
            goto done;
13271
761
        }
13272
1.05M
        p->mark = _mark;
13273
1.05M
        D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
13274
1.05M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or '|' bitwise_xor"));
13275
1.05M
    }
13276
0
    { // bitwise_xor
13277
1.05M
        if (p->error_indicator) {
13278
304
            p->level--;
13279
304
            return NULL;
13280
304
        }
13281
1.05M
        D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor"));
13282
1.05M
        expr_ty bitwise_xor_var;
13283
1.05M
        if (
13284
1.05M
            (bitwise_xor_var = bitwise_xor_rule(p))  // bitwise_xor
13285
1.05M
        )
13286
763k
        {
13287
763k
            D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor"));
13288
763k
            _res = bitwise_xor_var;
13289
763k
            goto done;
13290
763k
        }
13291
288k
        p->mark = _mark;
13292
288k
        D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
13293
288k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor"));
13294
288k
    }
13295
0
    _res = NULL;
13296
1.05M
  done:
13297
1.05M
    p->level--;
13298
1.05M
    return _res;
13299
288k
}
13300
13301
// Left-recursive
13302
// bitwise_xor: bitwise_xor '^' bitwise_and | bitwise_and
13303
static expr_ty bitwise_xor_raw(Parser *);
13304
static expr_ty
13305
bitwise_xor_rule(Parser *p)
13306
2.10M
{
13307
2.10M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13308
1
        _Pypegen_stack_overflow(p);
13309
1
    }
13310
2.10M
    expr_ty _res = NULL;
13311
2.10M
    if (_PyPegen_is_memoized(p, bitwise_xor_type, &_res)) {
13312
1.43M
        p->level--;
13313
1.43M
        return _res;
13314
1.43M
    }
13315
671k
    int _mark = p->mark;
13316
671k
    int _resmark = p->mark;
13317
1.05M
    while (1) {
13318
1.05M
        int tmpvar_3 = _PyPegen_update_memo(p, _mark, bitwise_xor_type, _res);
13319
1.05M
        if (tmpvar_3) {
13320
0
            p->level--;
13321
0
            return _res;
13322
0
        }
13323
1.05M
        p->mark = _mark;
13324
1.05M
        void *_raw = bitwise_xor_raw(p);
13325
1.05M
        if (p->error_indicator) {
13326
36.5k
            p->level--;
13327
36.5k
            return NULL;
13328
36.5k
        }
13329
1.01M
        if (_raw == NULL || p->mark <= _resmark)
13330
635k
            break;
13331
383k
        _resmark = p->mark;
13332
383k
        _res = _raw;
13333
383k
    }
13334
635k
    p->mark = _resmark;
13335
635k
    p->level--;
13336
635k
    return _res;
13337
671k
}
13338
static expr_ty
13339
bitwise_xor_raw(Parser *p)
13340
1.05M
{
13341
1.05M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13342
1
        _Pypegen_stack_overflow(p);
13343
1
    }
13344
1.05M
    if (p->error_indicator) {
13345
1
        p->level--;
13346
1
        return NULL;
13347
1
    }
13348
1.05M
    expr_ty _res = NULL;
13349
1.05M
    int _mark = p->mark;
13350
1.05M
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
13351
0
        p->error_indicator = 1;
13352
0
        p->level--;
13353
0
        return NULL;
13354
0
    }
13355
1.05M
    int _start_lineno = p->tokens[_mark]->lineno;
13356
1.05M
    UNUSED(_start_lineno); // Only used by EXTRA macro
13357
1.05M
    int _start_col_offset = p->tokens[_mark]->col_offset;
13358
1.05M
    UNUSED(_start_col_offset); // Only used by EXTRA macro
13359
1.05M
    { // bitwise_xor '^' bitwise_and
13360
1.05M
        if (p->error_indicator) {
13361
0
            p->level--;
13362
0
            return NULL;
13363
0
        }
13364
1.05M
        D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and"));
13365
1.05M
        Token * _literal;
13366
1.05M
        expr_ty a;
13367
1.05M
        expr_ty b;
13368
1.05M
        if (
13369
1.05M
            (a = bitwise_xor_rule(p))  // bitwise_xor
13370
1.05M
            &&
13371
1.05M
            (_literal = _PyPegen_expect_token(p, 32))  // token='^'
13372
1.05M
            &&
13373
1.05M
            (b = bitwise_and_rule(p))  // bitwise_and
13374
1.05M
        )
13375
741
        {
13376
741
            D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and"));
13377
741
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13378
741
            if (_token == NULL) {
13379
0
                p->level--;
13380
0
                return NULL;
13381
0
            }
13382
741
            int _end_lineno = _token->end_lineno;
13383
741
            UNUSED(_end_lineno); // Only used by EXTRA macro
13384
741
            int _end_col_offset = _token->end_col_offset;
13385
741
            UNUSED(_end_col_offset); // Only used by EXTRA macro
13386
741
            _res = _PyAST_BinOp ( a , BitXor , b , EXTRA );
13387
741
            if (_res == NULL && PyErr_Occurred()) {
13388
0
                p->error_indicator = 1;
13389
0
                p->level--;
13390
0
                return NULL;
13391
0
            }
13392
741
            goto done;
13393
741
        }
13394
1.05M
        p->mark = _mark;
13395
1.05M
        D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ',
13396
1.05M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor '^' bitwise_and"));
13397
1.05M
    }
13398
0
    { // bitwise_and
13399
1.05M
        if (p->error_indicator) {
13400
203
            p->level--;
13401
203
            return NULL;
13402
203
        }
13403
1.05M
        D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and"));
13404
1.05M
        expr_ty bitwise_and_var;
13405
1.05M
        if (
13406
1.05M
            (bitwise_and_var = bitwise_and_rule(p))  // bitwise_and
13407
1.05M
        )
13408
765k
        {
13409
765k
            D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and"));
13410
765k
            _res = bitwise_and_var;
13411
765k
            goto done;
13412
765k
        }
13413
288k
        p->mark = _mark;
13414
288k
        D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ',
13415
288k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and"));
13416
288k
    }
13417
0
    _res = NULL;
13418
1.05M
  done:
13419
1.05M
    p->level--;
13420
1.05M
    return _res;
13421
288k
}
13422
13423
// Left-recursive
13424
// bitwise_and: bitwise_and '&' shift_expr | shift_expr
13425
static expr_ty bitwise_and_raw(Parser *);
13426
static expr_ty
13427
bitwise_and_rule(Parser *p)
13428
2.11M
{
13429
2.11M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13430
1
        _Pypegen_stack_overflow(p);
13431
1
    }
13432
2.11M
    expr_ty _res = NULL;
13433
2.11M
    if (_PyPegen_is_memoized(p, bitwise_and_type, &_res)) {
13434
1.44M
        p->level--;
13435
1.44M
        return _res;
13436
1.44M
    }
13437
672k
    int _mark = p->mark;
13438
672k
    int _resmark = p->mark;
13439
1.05M
    while (1) {
13440
1.05M
        int tmpvar_4 = _PyPegen_update_memo(p, _mark, bitwise_and_type, _res);
13441
1.05M
        if (tmpvar_4) {
13442
0
            p->level--;
13443
0
            return _res;
13444
0
        }
13445
1.05M
        p->mark = _mark;
13446
1.05M
        void *_raw = bitwise_and_raw(p);
13447
1.05M
        if (p->error_indicator) {
13448
36.4k
            p->level--;
13449
36.4k
            return NULL;
13450
36.4k
        }
13451
1.02M
        if (_raw == NULL || p->mark <= _resmark)
13452
636k
            break;
13453
386k
        _resmark = p->mark;
13454
386k
        _res = _raw;
13455
386k
    }
13456
636k
    p->mark = _resmark;
13457
636k
    p->level--;
13458
636k
    return _res;
13459
672k
}
13460
static expr_ty
13461
bitwise_and_raw(Parser *p)
13462
1.05M
{
13463
1.05M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13464
1
        _Pypegen_stack_overflow(p);
13465
1
    }
13466
1.05M
    if (p->error_indicator) {
13467
1
        p->level--;
13468
1
        return NULL;
13469
1
    }
13470
1.05M
    expr_ty _res = NULL;
13471
1.05M
    int _mark = p->mark;
13472
1.05M
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
13473
0
        p->error_indicator = 1;
13474
0
        p->level--;
13475
0
        return NULL;
13476
0
    }
13477
1.05M
    int _start_lineno = p->tokens[_mark]->lineno;
13478
1.05M
    UNUSED(_start_lineno); // Only used by EXTRA macro
13479
1.05M
    int _start_col_offset = p->tokens[_mark]->col_offset;
13480
1.05M
    UNUSED(_start_col_offset); // Only used by EXTRA macro
13481
1.05M
    { // bitwise_and '&' shift_expr
13482
1.05M
        if (p->error_indicator) {
13483
0
            p->level--;
13484
0
            return NULL;
13485
0
        }
13486
1.05M
        D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr"));
13487
1.05M
        Token * _literal;
13488
1.05M
        expr_ty a;
13489
1.05M
        expr_ty b;
13490
1.05M
        if (
13491
1.05M
            (a = bitwise_and_rule(p))  // bitwise_and
13492
1.05M
            &&
13493
1.05M
            (_literal = _PyPegen_expect_token(p, 19))  // token='&'
13494
1.05M
            &&
13495
1.05M
            (b = shift_expr_rule(p))  // shift_expr
13496
1.05M
        )
13497
2.65k
        {
13498
2.65k
            D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr"));
13499
2.65k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13500
2.65k
            if (_token == NULL) {
13501
0
                p->level--;
13502
0
                return NULL;
13503
0
            }
13504
2.65k
            int _end_lineno = _token->end_lineno;
13505
2.65k
            UNUSED(_end_lineno); // Only used by EXTRA macro
13506
2.65k
            int _end_col_offset = _token->end_col_offset;
13507
2.65k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
13508
2.65k
            _res = _PyAST_BinOp ( a , BitAnd , b , EXTRA );
13509
2.65k
            if (_res == NULL && PyErr_Occurred()) {
13510
0
                p->error_indicator = 1;
13511
0
                p->level--;
13512
0
                return NULL;
13513
0
            }
13514
2.65k
            goto done;
13515
2.65k
        }
13516
1.05M
        p->mark = _mark;
13517
1.05M
        D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ',
13518
1.05M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and '&' shift_expr"));
13519
1.05M
    }
13520
0
    { // shift_expr
13521
1.05M
        if (p->error_indicator) {
13522
202
            p->level--;
13523
202
            return NULL;
13524
202
        }
13525
1.05M
        D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr"));
13526
1.05M
        expr_ty shift_expr_var;
13527
1.05M
        if (
13528
1.05M
            (shift_expr_var = shift_expr_rule(p))  // shift_expr
13529
1.05M
        )
13530
767k
        {
13531
767k
            D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr"));
13532
767k
            _res = shift_expr_var;
13533
767k
            goto done;
13534
767k
        }
13535
288k
        p->mark = _mark;
13536
288k
        D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ',
13537
288k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr"));
13538
288k
    }
13539
0
    _res = NULL;
13540
1.05M
  done:
13541
1.05M
    p->level--;
13542
1.05M
    return _res;
13543
288k
}
13544
13545
// Left-recursive
13546
// shift_expr: shift_expr '<<' sum | shift_expr '>>' sum | invalid_arithmetic | sum
13547
static expr_ty shift_expr_raw(Parser *);
13548
static expr_ty
13549
shift_expr_rule(Parser *p)
13550
3.18M
{
13551
3.18M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13552
1
        _Pypegen_stack_overflow(p);
13553
1
    }
13554
3.18M
    expr_ty _res = NULL;
13555
3.18M
    if (_PyPegen_is_memoized(p, shift_expr_type, &_res)) {
13556
2.51M
        p->level--;
13557
2.51M
        return _res;
13558
2.51M
    }
13559
675k
    int _mark = p->mark;
13560
675k
    int _resmark = p->mark;
13561
1.06M
    while (1) {
13562
1.06M
        int tmpvar_5 = _PyPegen_update_memo(p, _mark, shift_expr_type, _res);
13563
1.06M
        if (tmpvar_5) {
13564
0
            p->level--;
13565
0
            return _res;
13566
0
        }
13567
1.06M
        p->mark = _mark;
13568
1.06M
        void *_raw = shift_expr_raw(p);
13569
1.06M
        if (p->error_indicator) {
13570
36.4k
            p->level--;
13571
36.4k
            return NULL;
13572
36.4k
        }
13573
1.02M
        if (_raw == NULL || p->mark <= _resmark)
13574
639k
            break;
13575
387k
        _resmark = p->mark;
13576
387k
        _res = _raw;
13577
387k
    }
13578
639k
    p->mark = _resmark;
13579
639k
    p->level--;
13580
639k
    return _res;
13581
675k
}
13582
static expr_ty
13583
shift_expr_raw(Parser *p)
13584
1.06M
{
13585
1.06M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13586
1
        _Pypegen_stack_overflow(p);
13587
1
    }
13588
1.06M
    if (p->error_indicator) {
13589
1
        p->level--;
13590
1
        return NULL;
13591
1
    }
13592
1.06M
    expr_ty _res = NULL;
13593
1.06M
    int _mark = p->mark;
13594
1.06M
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
13595
0
        p->error_indicator = 1;
13596
0
        p->level--;
13597
0
        return NULL;
13598
0
    }
13599
1.06M
    int _start_lineno = p->tokens[_mark]->lineno;
13600
1.06M
    UNUSED(_start_lineno); // Only used by EXTRA macro
13601
1.06M
    int _start_col_offset = p->tokens[_mark]->col_offset;
13602
1.06M
    UNUSED(_start_col_offset); // Only used by EXTRA macro
13603
1.06M
    { // shift_expr '<<' sum
13604
1.06M
        if (p->error_indicator) {
13605
0
            p->level--;
13606
0
            return NULL;
13607
0
        }
13608
1.06M
        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum"));
13609
1.06M
        Token * _literal;
13610
1.06M
        expr_ty a;
13611
1.06M
        expr_ty b;
13612
1.06M
        if (
13613
1.06M
            (a = shift_expr_rule(p))  // shift_expr
13614
1.06M
            &&
13615
1.06M
            (_literal = _PyPegen_expect_token(p, 33))  // token='<<'
13616
1.06M
            &&
13617
1.06M
            (b = sum_rule(p))  // sum
13618
1.06M
        )
13619
475
        {
13620
475
            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum"));
13621
475
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13622
475
            if (_token == NULL) {
13623
0
                p->level--;
13624
0
                return NULL;
13625
0
            }
13626
475
            int _end_lineno = _token->end_lineno;
13627
475
            UNUSED(_end_lineno); // Only used by EXTRA macro
13628
475
            int _end_col_offset = _token->end_col_offset;
13629
475
            UNUSED(_end_col_offset); // Only used by EXTRA macro
13630
475
            _res = _PyAST_BinOp ( a , LShift , b , EXTRA );
13631
475
            if (_res == NULL && PyErr_Occurred()) {
13632
0
                p->error_indicator = 1;
13633
0
                p->level--;
13634
0
                return NULL;
13635
0
            }
13636
475
            goto done;
13637
475
        }
13638
1.06M
        p->mark = _mark;
13639
1.06M
        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
13640
1.06M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '<<' sum"));
13641
1.06M
    }
13642
0
    { // shift_expr '>>' sum
13643
1.06M
        if (p->error_indicator) {
13644
199
            p->level--;
13645
199
            return NULL;
13646
199
        }
13647
1.06M
        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum"));
13648
1.06M
        Token * _literal;
13649
1.06M
        expr_ty a;
13650
1.06M
        expr_ty b;
13651
1.06M
        if (
13652
1.06M
            (a = shift_expr_rule(p))  // shift_expr
13653
1.06M
            &&
13654
1.06M
            (_literal = _PyPegen_expect_token(p, 34))  // token='>>'
13655
1.06M
            &&
13656
1.06M
            (b = sum_rule(p))  // sum
13657
1.06M
        )
13658
696
        {
13659
696
            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum"));
13660
696
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13661
696
            if (_token == NULL) {
13662
0
                p->level--;
13663
0
                return NULL;
13664
0
            }
13665
696
            int _end_lineno = _token->end_lineno;
13666
696
            UNUSED(_end_lineno); // Only used by EXTRA macro
13667
696
            int _end_col_offset = _token->end_col_offset;
13668
696
            UNUSED(_end_col_offset); // Only used by EXTRA macro
13669
696
            _res = _PyAST_BinOp ( a , RShift , b , EXTRA );
13670
696
            if (_res == NULL && PyErr_Occurred()) {
13671
0
                p->error_indicator = 1;
13672
0
                p->level--;
13673
0
                return NULL;
13674
0
            }
13675
696
            goto done;
13676
696
        }
13677
1.06M
        p->mark = _mark;
13678
1.06M
        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
13679
1.06M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '>>' sum"));
13680
1.06M
    }
13681
1.06M
    if (p->call_invalid_rules) { // invalid_arithmetic
13682
267k
        if (p->error_indicator) {
13683
97
            p->level--;
13684
97
            return NULL;
13685
97
        }
13686
267k
        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_arithmetic"));
13687
267k
        void *invalid_arithmetic_var;
13688
267k
        if (
13689
267k
            (invalid_arithmetic_var = invalid_arithmetic_rule(p))  // invalid_arithmetic
13690
267k
        )
13691
0
        {
13692
0
            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_arithmetic"));
13693
0
            _res = invalid_arithmetic_var;
13694
0
            goto done;
13695
0
        }
13696
267k
        p->mark = _mark;
13697
267k
        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
13698
267k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_arithmetic"));
13699
267k
    }
13700
1.06M
    { // sum
13701
1.06M
        if (p->error_indicator) {
13702
27.9k
            p->level--;
13703
27.9k
            return NULL;
13704
27.9k
        }
13705
1.03M
        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum"));
13706
1.03M
        expr_ty sum_var;
13707
1.03M
        if (
13708
1.03M
            (sum_var = sum_rule(p))  // sum
13709
1.03M
        )
13710
773k
        {
13711
773k
            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum"));
13712
773k
            _res = sum_var;
13713
773k
            goto done;
13714
773k
        }
13715
261k
        p->mark = _mark;
13716
261k
        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
13717
261k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum"));
13718
261k
    }
13719
0
    _res = NULL;
13720
1.03M
  done:
13721
1.03M
    p->level--;
13722
1.03M
    return _res;
13723
261k
}
13724
13725
// Left-recursive
13726
// sum: sum '+' term | sum '-' term | term
13727
static expr_ty sum_raw(Parser *);
13728
static expr_ty
13729
sum_rule(Parser *p)
13730
3.47M
{
13731
3.47M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13732
1
        _Pypegen_stack_overflow(p);
13733
1
    }
13734
3.47M
    expr_ty _res = NULL;
13735
3.47M
    if (_PyPegen_is_memoized(p, sum_type, &_res)) {
13736
2.79M
        p->level--;
13737
2.79M
        return _res;
13738
2.79M
    }
13739
677k
    int _mark = p->mark;
13740
677k
    int _resmark = p->mark;
13741
1.08M
    while (1) {
13742
1.08M
        int tmpvar_6 = _PyPegen_update_memo(p, _mark, sum_type, _res);
13743
1.08M
        if (tmpvar_6) {
13744
0
            p->level--;
13745
0
            return _res;
13746
0
        }
13747
1.08M
        p->mark = _mark;
13748
1.08M
        void *_raw = sum_raw(p);
13749
1.08M
        if (p->error_indicator) {
13750
36.3k
            p->level--;
13751
36.3k
            return NULL;
13752
36.3k
        }
13753
1.05M
        if (_raw == NULL || p->mark <= _resmark)
13754
641k
            break;
13755
411k
        _resmark = p->mark;
13756
411k
        _res = _raw;
13757
411k
    }
13758
641k
    p->mark = _resmark;
13759
641k
    p->level--;
13760
641k
    return _res;
13761
677k
}
13762
static expr_ty
13763
sum_raw(Parser *p)
13764
1.08M
{
13765
1.08M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13766
1
        _Pypegen_stack_overflow(p);
13767
1
    }
13768
1.08M
    if (p->error_indicator) {
13769
2
        p->level--;
13770
2
        return NULL;
13771
2
    }
13772
1.08M
    expr_ty _res = NULL;
13773
1.08M
    int _mark = p->mark;
13774
1.08M
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
13775
0
        p->error_indicator = 1;
13776
0
        p->level--;
13777
0
        return NULL;
13778
0
    }
13779
1.08M
    int _start_lineno = p->tokens[_mark]->lineno;
13780
1.08M
    UNUSED(_start_lineno); // Only used by EXTRA macro
13781
1.08M
    int _start_col_offset = p->tokens[_mark]->col_offset;
13782
1.08M
    UNUSED(_start_col_offset); // Only used by EXTRA macro
13783
1.08M
    { // sum '+' term
13784
1.08M
        if (p->error_indicator) {
13785
0
            p->level--;
13786
0
            return NULL;
13787
0
        }
13788
1.08M
        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '+' term"));
13789
1.08M
        Token * _literal;
13790
1.08M
        expr_ty a;
13791
1.08M
        expr_ty b;
13792
1.08M
        if (
13793
1.08M
            (a = sum_rule(p))  // sum
13794
1.08M
            &&
13795
1.08M
            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
13796
1.08M
            &&
13797
1.08M
            (b = term_rule(p))  // term
13798
1.08M
        )
13799
10.3k
        {
13800
10.3k
            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '+' term"));
13801
10.3k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13802
10.3k
            if (_token == NULL) {
13803
0
                p->level--;
13804
0
                return NULL;
13805
0
            }
13806
10.3k
            int _end_lineno = _token->end_lineno;
13807
10.3k
            UNUSED(_end_lineno); // Only used by EXTRA macro
13808
10.3k
            int _end_col_offset = _token->end_col_offset;
13809
10.3k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
13810
10.3k
            _res = _PyAST_BinOp ( a , Add , b , EXTRA );
13811
10.3k
            if (_res == NULL && PyErr_Occurred()) {
13812
0
                p->error_indicator = 1;
13813
0
                p->level--;
13814
0
                return NULL;
13815
0
            }
13816
10.3k
            goto done;
13817
10.3k
        }
13818
1.07M
        p->mark = _mark;
13819
1.07M
        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
13820
1.07M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '+' term"));
13821
1.07M
    }
13822
0
    { // sum '-' term
13823
1.07M
        if (p->error_indicator) {
13824
256
            p->level--;
13825
256
            return NULL;
13826
256
        }
13827
1.07M
        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '-' term"));
13828
1.07M
        Token * _literal;
13829
1.07M
        expr_ty a;
13830
1.07M
        expr_ty b;
13831
1.07M
        if (
13832
1.07M
            (a = sum_rule(p))  // sum
13833
1.07M
            &&
13834
1.07M
            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
13835
1.07M
            &&
13836
1.07M
            (b = term_rule(p))  // term
13837
1.07M
        )
13838
12.1k
        {
13839
12.1k
            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '-' term"));
13840
12.1k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13841
12.1k
            if (_token == NULL) {
13842
0
                p->level--;
13843
0
                return NULL;
13844
0
            }
13845
12.1k
            int _end_lineno = _token->end_lineno;
13846
12.1k
            UNUSED(_end_lineno); // Only used by EXTRA macro
13847
12.1k
            int _end_col_offset = _token->end_col_offset;
13848
12.1k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
13849
12.1k
            _res = _PyAST_BinOp ( a , Sub , b , EXTRA );
13850
12.1k
            if (_res == NULL && PyErr_Occurred()) {
13851
0
                p->error_indicator = 1;
13852
0
                p->level--;
13853
0
                return NULL;
13854
0
            }
13855
12.1k
            goto done;
13856
12.1k
        }
13857
1.06M
        p->mark = _mark;
13858
1.06M
        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
13859
1.06M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '-' term"));
13860
1.06M
    }
13861
0
    { // term
13862
1.06M
        if (p->error_indicator) {
13863
850
            p->level--;
13864
850
            return NULL;
13865
850
        }
13866
1.06M
        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term"));
13867
1.06M
        expr_ty term_var;
13868
1.06M
        if (
13869
1.06M
            (term_var = term_rule(p))  // term
13870
1.06M
        )
13871
777k
        {
13872
777k
            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term"));
13873
777k
            _res = term_var;
13874
777k
            goto done;
13875
777k
        }
13876
288k
        p->mark = _mark;
13877
288k
        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
13878
288k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term"));
13879
288k
    }
13880
0
    _res = NULL;
13881
1.08M
  done:
13882
1.08M
    p->level--;
13883
1.08M
    return _res;
13884
288k
}
13885
13886
// Left-recursive
13887
// term:
13888
//     | term '*' factor
13889
//     | term '/' factor
13890
//     | term '//' factor
13891
//     | term '%' factor
13892
//     | term '@' factor
13893
//     | invalid_factor
13894
//     | factor
13895
static expr_ty term_raw(Parser *);
13896
static expr_ty
13897
term_rule(Parser *p)
13898
6.70M
{
13899
6.70M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13900
1
        _Pypegen_stack_overflow(p);
13901
1
    }
13902
6.70M
    expr_ty _res = NULL;
13903
6.70M
    if (_PyPegen_is_memoized(p, term_type, &_res)) {
13904
6.00M
        p->level--;
13905
6.00M
        return _res;
13906
6.00M
    }
13907
702k
    int _mark = p->mark;
13908
702k
    int _resmark = p->mark;
13909
1.13M
    while (1) {
13910
1.13M
        int tmpvar_7 = _PyPegen_update_memo(p, _mark, term_type, _res);
13911
1.13M
        if (tmpvar_7) {
13912
0
            p->level--;
13913
0
            return _res;
13914
0
        }
13915
1.13M
        p->mark = _mark;
13916
1.13M
        void *_raw = term_raw(p);
13917
1.13M
        if (p->error_indicator) {
13918
36.3k
            p->level--;
13919
36.3k
            return NULL;
13920
36.3k
        }
13921
1.09M
        if (_raw == NULL || p->mark <= _resmark)
13922
666k
            break;
13923
427k
        _resmark = p->mark;
13924
427k
        _res = _raw;
13925
427k
    }
13926
666k
    p->mark = _resmark;
13927
666k
    p->level--;
13928
666k
    return _res;
13929
702k
}
13930
static expr_ty
13931
term_raw(Parser *p)
13932
1.13M
{
13933
1.13M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
13934
1
        _Pypegen_stack_overflow(p);
13935
1
    }
13936
1.13M
    if (p->error_indicator) {
13937
1
        p->level--;
13938
1
        return NULL;
13939
1
    }
13940
1.13M
    expr_ty _res = NULL;
13941
1.13M
    int _mark = p->mark;
13942
1.13M
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
13943
0
        p->error_indicator = 1;
13944
0
        p->level--;
13945
0
        return NULL;
13946
0
    }
13947
1.13M
    int _start_lineno = p->tokens[_mark]->lineno;
13948
1.13M
    UNUSED(_start_lineno); // Only used by EXTRA macro
13949
1.13M
    int _start_col_offset = p->tokens[_mark]->col_offset;
13950
1.13M
    UNUSED(_start_col_offset); // Only used by EXTRA macro
13951
1.13M
    { // term '*' factor
13952
1.13M
        if (p->error_indicator) {
13953
0
            p->level--;
13954
0
            return NULL;
13955
0
        }
13956
1.13M
        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '*' factor"));
13957
1.13M
        Token * _literal;
13958
1.13M
        expr_ty a;
13959
1.13M
        expr_ty b;
13960
1.13M
        if (
13961
1.13M
            (a = term_rule(p))  // term
13962
1.13M
            &&
13963
1.13M
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
13964
1.13M
            &&
13965
1.13M
            (b = factor_rule(p))  // factor
13966
1.13M
        )
13967
5.69k
        {
13968
5.69k
            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '*' factor"));
13969
5.69k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13970
5.69k
            if (_token == NULL) {
13971
0
                p->level--;
13972
0
                return NULL;
13973
0
            }
13974
5.69k
            int _end_lineno = _token->end_lineno;
13975
5.69k
            UNUSED(_end_lineno); // Only used by EXTRA macro
13976
5.69k
            int _end_col_offset = _token->end_col_offset;
13977
5.69k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
13978
5.69k
            _res = _PyAST_BinOp ( a , Mult , b , EXTRA );
13979
5.69k
            if (_res == NULL && PyErr_Occurred()) {
13980
0
                p->error_indicator = 1;
13981
0
                p->level--;
13982
0
                return NULL;
13983
0
            }
13984
5.69k
            goto done;
13985
5.69k
        }
13986
1.12M
        p->mark = _mark;
13987
1.12M
        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
13988
1.12M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '*' factor"));
13989
1.12M
    }
13990
0
    { // term '/' factor
13991
1.12M
        if (p->error_indicator) {
13992
256
            p->level--;
13993
256
            return NULL;
13994
256
        }
13995
1.12M
        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '/' factor"));
13996
1.12M
        Token * _literal;
13997
1.12M
        expr_ty a;
13998
1.12M
        expr_ty b;
13999
1.12M
        if (
14000
1.12M
            (a = term_rule(p))  // term
14001
1.12M
            &&
14002
1.12M
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
14003
1.12M
            &&
14004
1.12M
            (b = factor_rule(p))  // factor
14005
1.12M
        )
14006
3.26k
        {
14007
3.26k
            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '/' factor"));
14008
3.26k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14009
3.26k
            if (_token == NULL) {
14010
0
                p->level--;
14011
0
                return NULL;
14012
0
            }
14013
3.26k
            int _end_lineno = _token->end_lineno;
14014
3.26k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14015
3.26k
            int _end_col_offset = _token->end_col_offset;
14016
3.26k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14017
3.26k
            _res = _PyAST_BinOp ( a , Div , b , EXTRA );
14018
3.26k
            if (_res == NULL && PyErr_Occurred()) {
14019
0
                p->error_indicator = 1;
14020
0
                p->level--;
14021
0
                return NULL;
14022
0
            }
14023
3.26k
            goto done;
14024
3.26k
        }
14025
1.12M
        p->mark = _mark;
14026
1.12M
        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
14027
1.12M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '/' factor"));
14028
1.12M
    }
14029
0
    { // term '//' factor
14030
1.12M
        if (p->error_indicator) {
14031
231
            p->level--;
14032
231
            return NULL;
14033
231
        }
14034
1.12M
        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '//' factor"));
14035
1.12M
        Token * _literal;
14036
1.12M
        expr_ty a;
14037
1.12M
        expr_ty b;
14038
1.12M
        if (
14039
1.12M
            (a = term_rule(p))  // term
14040
1.12M
            &&
14041
1.12M
            (_literal = _PyPegen_expect_token(p, 47))  // token='//'
14042
1.12M
            &&
14043
1.12M
            (b = factor_rule(p))  // factor
14044
1.12M
        )
14045
437
        {
14046
437
            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '//' factor"));
14047
437
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14048
437
            if (_token == NULL) {
14049
0
                p->level--;
14050
0
                return NULL;
14051
0
            }
14052
437
            int _end_lineno = _token->end_lineno;
14053
437
            UNUSED(_end_lineno); // Only used by EXTRA macro
14054
437
            int _end_col_offset = _token->end_col_offset;
14055
437
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14056
437
            _res = _PyAST_BinOp ( a , FloorDiv , b , EXTRA );
14057
437
            if (_res == NULL && PyErr_Occurred()) {
14058
0
                p->error_indicator = 1;
14059
0
                p->level--;
14060
0
                return NULL;
14061
0
            }
14062
437
            goto done;
14063
437
        }
14064
1.12M
        p->mark = _mark;
14065
1.12M
        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
14066
1.12M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '//' factor"));
14067
1.12M
    }
14068
0
    { // term '%' factor
14069
1.12M
        if (p->error_indicator) {
14070
200
            p->level--;
14071
200
            return NULL;
14072
200
        }
14073
1.12M
        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '%' factor"));
14074
1.12M
        Token * _literal;
14075
1.12M
        expr_ty a;
14076
1.12M
        expr_ty b;
14077
1.12M
        if (
14078
1.12M
            (a = term_rule(p))  // term
14079
1.12M
            &&
14080
1.12M
            (_literal = _PyPegen_expect_token(p, 24))  // token='%'
14081
1.12M
            &&
14082
1.12M
            (b = factor_rule(p))  // factor
14083
1.12M
        )
14084
2.98k
        {
14085
2.98k
            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '%' factor"));
14086
2.98k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14087
2.98k
            if (_token == NULL) {
14088
0
                p->level--;
14089
0
                return NULL;
14090
0
            }
14091
2.98k
            int _end_lineno = _token->end_lineno;
14092
2.98k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14093
2.98k
            int _end_col_offset = _token->end_col_offset;
14094
2.98k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14095
2.98k
            _res = _PyAST_BinOp ( a , Mod , b , EXTRA );
14096
2.98k
            if (_res == NULL && PyErr_Occurred()) {
14097
0
                p->error_indicator = 1;
14098
0
                p->level--;
14099
0
                return NULL;
14100
0
            }
14101
2.98k
            goto done;
14102
2.98k
        }
14103
1.11M
        p->mark = _mark;
14104
1.11M
        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
14105
1.11M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '%' factor"));
14106
1.11M
    }
14107
0
    { // term '@' factor
14108
1.11M
        if (p->error_indicator) {
14109
218
            p->level--;
14110
218
            return NULL;
14111
218
        }
14112
1.11M
        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '@' factor"));
14113
1.11M
        Token * _literal;
14114
1.11M
        expr_ty a;
14115
1.11M
        expr_ty b;
14116
1.11M
        if (
14117
1.11M
            (a = term_rule(p))  // term
14118
1.11M
            &&
14119
1.11M
            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
14120
1.11M
            &&
14121
1.11M
            (b = factor_rule(p))  // factor
14122
1.11M
        )
14123
2.92k
        {
14124
2.92k
            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '@' factor"));
14125
2.92k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14126
2.92k
            if (_token == NULL) {
14127
0
                p->level--;
14128
0
                return NULL;
14129
0
            }
14130
2.92k
            int _end_lineno = _token->end_lineno;
14131
2.92k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14132
2.92k
            int _end_col_offset = _token->end_col_offset;
14133
2.92k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14134
2.92k
            _res = CHECK_VERSION ( expr_ty , 5 , "The '@' operator is" , _PyAST_BinOp ( a , MatMult , b , EXTRA ) );
14135
2.92k
            if (_res == NULL && PyErr_Occurred()) {
14136
0
                p->error_indicator = 1;
14137
0
                p->level--;
14138
0
                return NULL;
14139
0
            }
14140
2.92k
            goto done;
14141
2.92k
        }
14142
1.11M
        p->mark = _mark;
14143
1.11M
        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
14144
1.11M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '@' factor"));
14145
1.11M
    }
14146
1.11M
    if (p->call_invalid_rules) { // invalid_factor
14147
278k
        if (p->error_indicator) {
14148
214
            p->level--;
14149
214
            return NULL;
14150
214
        }
14151
277k
        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_factor"));
14152
277k
        void *invalid_factor_var;
14153
277k
        if (
14154
277k
            (invalid_factor_var = invalid_factor_rule(p))  // invalid_factor
14155
277k
        )
14156
0
        {
14157
0
            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_factor"));
14158
0
            _res = invalid_factor_var;
14159
0
            goto done;
14160
0
        }
14161
277k
        p->mark = _mark;
14162
277k
        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
14163
277k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_factor"));
14164
277k
    }
14165
1.11M
    { // factor
14166
1.11M
        if (p->error_indicator) {
14167
253
            p->level--;
14168
253
            return NULL;
14169
253
        }
14170
1.11M
        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "factor"));
14171
1.11M
        expr_ty factor_var;
14172
1.11M
        if (
14173
1.11M
            (factor_var = factor_rule(p))  // factor
14174
1.11M
        )
14175
824k
        {
14176
824k
            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "factor"));
14177
824k
            _res = factor_var;
14178
824k
            goto done;
14179
824k
        }
14180
289k
        p->mark = _mark;
14181
289k
        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
14182
289k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "factor"));
14183
289k
    }
14184
0
    _res = NULL;
14185
1.12M
  done:
14186
1.12M
    p->level--;
14187
1.12M
    return _res;
14188
289k
}
14189
14190
// factor: '+' factor | '-' factor | '~' factor | power
14191
static expr_ty
14192
factor_rule(Parser *p)
14193
1.35M
{
14194
1.35M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
14195
1
        _Pypegen_stack_overflow(p);
14196
1
    }
14197
1.35M
    if (p->error_indicator) {
14198
1
        p->level--;
14199
1
        return NULL;
14200
1
    }
14201
1.35M
    expr_ty _res = NULL;
14202
1.35M
    if (_PyPegen_is_memoized(p, factor_type, &_res)) {
14203
414k
        p->level--;
14204
414k
        return _res;
14205
414k
    }
14206
940k
    int _mark = p->mark;
14207
940k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
14208
0
        p->error_indicator = 1;
14209
0
        p->level--;
14210
0
        return NULL;
14211
0
    }
14212
940k
    int _start_lineno = p->tokens[_mark]->lineno;
14213
940k
    UNUSED(_start_lineno); // Only used by EXTRA macro
14214
940k
    int _start_col_offset = p->tokens[_mark]->col_offset;
14215
940k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
14216
940k
    { // '+' factor
14217
940k
        if (p->error_indicator) {
14218
0
            p->level--;
14219
0
            return NULL;
14220
0
        }
14221
940k
        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+' factor"));
14222
940k
        Token * _literal;
14223
940k
        expr_ty a;
14224
940k
        if (
14225
940k
            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
14226
940k
            &&
14227
940k
            (a = factor_rule(p))  // factor
14228
940k
        )
14229
77.2k
        {
14230
77.2k
            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+' factor"));
14231
77.2k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14232
77.2k
            if (_token == NULL) {
14233
0
                p->level--;
14234
0
                return NULL;
14235
0
            }
14236
77.2k
            int _end_lineno = _token->end_lineno;
14237
77.2k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14238
77.2k
            int _end_col_offset = _token->end_col_offset;
14239
77.2k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14240
77.2k
            _res = _PyAST_UnaryOp ( UAdd , a , EXTRA );
14241
77.2k
            if (_res == NULL && PyErr_Occurred()) {
14242
0
                p->error_indicator = 1;
14243
0
                p->level--;
14244
0
                return NULL;
14245
0
            }
14246
77.2k
            goto done;
14247
77.2k
        }
14248
863k
        p->mark = _mark;
14249
863k
        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
14250
863k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+' factor"));
14251
863k
    }
14252
0
    { // '-' factor
14253
863k
        if (p->error_indicator) {
14254
545
            p->level--;
14255
545
            return NULL;
14256
545
        }
14257
862k
        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' factor"));
14258
862k
        Token * _literal;
14259
862k
        expr_ty a;
14260
862k
        if (
14261
862k
            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
14262
862k
            &&
14263
862k
            (a = factor_rule(p))  // factor
14264
862k
        )
14265
121k
        {
14266
121k
            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' factor"));
14267
121k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14268
121k
            if (_token == NULL) {
14269
0
                p->level--;
14270
0
                return NULL;
14271
0
            }
14272
121k
            int _end_lineno = _token->end_lineno;
14273
121k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14274
121k
            int _end_col_offset = _token->end_col_offset;
14275
121k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14276
121k
            _res = _PyAST_UnaryOp ( USub , a , EXTRA );
14277
121k
            if (_res == NULL && PyErr_Occurred()) {
14278
0
                p->error_indicator = 1;
14279
0
                p->level--;
14280
0
                return NULL;
14281
0
            }
14282
121k
            goto done;
14283
121k
        }
14284
740k
        p->mark = _mark;
14285
740k
        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
14286
740k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' factor"));
14287
740k
    }
14288
0
    { // '~' factor
14289
740k
        if (p->error_indicator) {
14290
2.50k
            p->level--;
14291
2.50k
            return NULL;
14292
2.50k
        }
14293
738k
        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~' factor"));
14294
738k
        Token * _literal;
14295
738k
        expr_ty a;
14296
738k
        if (
14297
738k
            (_literal = _PyPegen_expect_token(p, 31))  // token='~'
14298
738k
            &&
14299
738k
            (a = factor_rule(p))  // factor
14300
738k
        )
14301
14.7k
        {
14302
14.7k
            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~' factor"));
14303
14.7k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14304
14.7k
            if (_token == NULL) {
14305
0
                p->level--;
14306
0
                return NULL;
14307
0
            }
14308
14.7k
            int _end_lineno = _token->end_lineno;
14309
14.7k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14310
14.7k
            int _end_col_offset = _token->end_col_offset;
14311
14.7k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14312
14.7k
            _res = _PyAST_UnaryOp ( Invert , a , EXTRA );
14313
14.7k
            if (_res == NULL && PyErr_Occurred()) {
14314
0
                p->error_indicator = 1;
14315
0
                p->level--;
14316
0
                return NULL;
14317
0
            }
14318
14.7k
            goto done;
14319
14.7k
        }
14320
723k
        p->mark = _mark;
14321
723k
        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
14322
723k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'~' factor"));
14323
723k
    }
14324
0
    { // power
14325
723k
        if (p->error_indicator) {
14326
273
            p->level--;
14327
273
            return NULL;
14328
273
        }
14329
723k
        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "power"));
14330
723k
        expr_ty power_var;
14331
723k
        if (
14332
723k
            (power_var = power_rule(p))  // power
14333
723k
        )
14334
427k
        {
14335
427k
            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "power"));
14336
427k
            _res = power_var;
14337
427k
            goto done;
14338
427k
        }
14339
295k
        p->mark = _mark;
14340
295k
        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
14341
295k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "power"));
14342
295k
    }
14343
0
    _res = NULL;
14344
937k
  done:
14345
937k
    _PyPegen_insert_memo(p, _mark, factor_type, _res);
14346
937k
    p->level--;
14347
937k
    return _res;
14348
295k
}
14349
14350
// power: await_primary '**' factor | await_primary
14351
static expr_ty
14352
power_rule(Parser *p)
14353
723k
{
14354
723k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
14355
1
        _Pypegen_stack_overflow(p);
14356
1
    }
14357
723k
    if (p->error_indicator) {
14358
1
        p->level--;
14359
1
        return NULL;
14360
1
    }
14361
723k
    expr_ty _res = NULL;
14362
723k
    int _mark = p->mark;
14363
723k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
14364
0
        p->error_indicator = 1;
14365
0
        p->level--;
14366
0
        return NULL;
14367
0
    }
14368
723k
    int _start_lineno = p->tokens[_mark]->lineno;
14369
723k
    UNUSED(_start_lineno); // Only used by EXTRA macro
14370
723k
    int _start_col_offset = p->tokens[_mark]->col_offset;
14371
723k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
14372
723k
    { // await_primary '**' factor
14373
723k
        if (p->error_indicator) {
14374
0
            p->level--;
14375
0
            return NULL;
14376
0
        }
14377
723k
        D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor"));
14378
723k
        Token * _literal;
14379
723k
        expr_ty a;
14380
723k
        expr_ty b;
14381
723k
        if (
14382
723k
            (a = await_primary_rule(p))  // await_primary
14383
723k
            &&
14384
723k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
14385
723k
            &&
14386
723k
            (b = factor_rule(p))  // factor
14387
723k
        )
14388
1.93k
        {
14389
1.93k
            D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor"));
14390
1.93k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14391
1.93k
            if (_token == NULL) {
14392
0
                p->level--;
14393
0
                return NULL;
14394
0
            }
14395
1.93k
            int _end_lineno = _token->end_lineno;
14396
1.93k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14397
1.93k
            int _end_col_offset = _token->end_col_offset;
14398
1.93k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14399
1.93k
            _res = _PyAST_BinOp ( a , Pow , b , EXTRA );
14400
1.93k
            if (_res == NULL && PyErr_Occurred()) {
14401
0
                p->error_indicator = 1;
14402
0
                p->level--;
14403
0
                return NULL;
14404
0
            }
14405
1.93k
            goto done;
14406
1.93k
        }
14407
721k
        p->mark = _mark;
14408
721k
        D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ',
14409
721k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary '**' factor"));
14410
721k
    }
14411
0
    { // await_primary
14412
721k
        if (p->error_indicator) {
14413
36.3k
            p->level--;
14414
36.3k
            return NULL;
14415
36.3k
        }
14416
684k
        D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary"));
14417
684k
        expr_ty await_primary_var;
14418
684k
        if (
14419
684k
            (await_primary_var = await_primary_rule(p))  // await_primary
14420
684k
        )
14421
426k
        {
14422
426k
            D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary"));
14423
426k
            _res = await_primary_var;
14424
426k
            goto done;
14425
426k
        }
14426
258k
        p->mark = _mark;
14427
258k
        D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ',
14428
258k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary"));
14429
258k
    }
14430
0
    _res = NULL;
14431
686k
  done:
14432
686k
    p->level--;
14433
686k
    return _res;
14434
258k
}
14435
14436
// await_primary: 'await' primary | primary
14437
static expr_ty
14438
await_primary_rule(Parser *p)
14439
1.40M
{
14440
1.40M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
14441
2
        _Pypegen_stack_overflow(p);
14442
2
    }
14443
1.40M
    if (p->error_indicator) {
14444
2
        p->level--;
14445
2
        return NULL;
14446
2
    }
14447
1.40M
    expr_ty _res = NULL;
14448
1.40M
    if (_PyPegen_is_memoized(p, await_primary_type, &_res)) {
14449
684k
        p->level--;
14450
684k
        return _res;
14451
684k
    }
14452
723k
    int _mark = p->mark;
14453
723k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
14454
0
        p->error_indicator = 1;
14455
0
        p->level--;
14456
0
        return NULL;
14457
0
    }
14458
723k
    int _start_lineno = p->tokens[_mark]->lineno;
14459
723k
    UNUSED(_start_lineno); // Only used by EXTRA macro
14460
723k
    int _start_col_offset = p->tokens[_mark]->col_offset;
14461
723k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
14462
723k
    { // 'await' primary
14463
723k
        if (p->error_indicator) {
14464
0
            p->level--;
14465
0
            return NULL;
14466
0
        }
14467
723k
        D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'await' primary"));
14468
723k
        Token * _keyword;
14469
723k
        expr_ty a;
14470
723k
        if (
14471
723k
            (_keyword = _PyPegen_expect_token(p, 598))  // token='await'
14472
723k
            &&
14473
723k
            (a = primary_rule(p))  // primary
14474
723k
        )
14475
397
        {
14476
397
            D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'await' primary"));
14477
397
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14478
397
            if (_token == NULL) {
14479
0
                p->level--;
14480
0
                return NULL;
14481
0
            }
14482
397
            int _end_lineno = _token->end_lineno;
14483
397
            UNUSED(_end_lineno); // Only used by EXTRA macro
14484
397
            int _end_col_offset = _token->end_col_offset;
14485
397
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14486
397
            _res = CHECK_VERSION ( expr_ty , 5 , "Await expressions are" , _PyAST_Await ( a , EXTRA ) );
14487
397
            if (_res == NULL && PyErr_Occurred()) {
14488
0
                p->error_indicator = 1;
14489
0
                p->level--;
14490
0
                return NULL;
14491
0
            }
14492
397
            goto done;
14493
397
        }
14494
722k
        p->mark = _mark;
14495
722k
        D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ',
14496
722k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'await' primary"));
14497
722k
    }
14498
0
    { // primary
14499
722k
        if (p->error_indicator) {
14500
197
            p->level--;
14501
197
            return NULL;
14502
197
        }
14503
722k
        D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary"));
14504
722k
        expr_ty primary_var;
14505
722k
        if (
14506
722k
            (primary_var = primary_rule(p))  // primary
14507
722k
        )
14508
427k
        {
14509
427k
            D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary"));
14510
427k
            _res = primary_var;
14511
427k
            goto done;
14512
427k
        }
14513
294k
        p->mark = _mark;
14514
294k
        D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ',
14515
294k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary"));
14516
294k
    }
14517
0
    _res = NULL;
14518
723k
  done:
14519
723k
    _PyPegen_insert_memo(p, _mark, await_primary_type, _res);
14520
723k
    p->level--;
14521
723k
    return _res;
14522
294k
}
14523
14524
// Left-recursive
14525
// primary:
14526
//     | primary '.' NAME
14527
//     | primary genexp
14528
//     | primary '(' arguments? ')'
14529
//     | primary '[' slices ']'
14530
//     | atom
14531
static expr_ty primary_raw(Parser *);
14532
static expr_ty
14533
primary_rule(Parser *p)
14534
5.47M
{
14535
5.47M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
14536
2
        _Pypegen_stack_overflow(p);
14537
2
    }
14538
5.47M
    expr_ty _res = NULL;
14539
5.47M
    if (_PyPegen_is_memoized(p, primary_type, &_res)) {
14540
4.75M
        p->level--;
14541
4.75M
        return _res;
14542
4.75M
    }
14543
723k
    int _mark = p->mark;
14544
723k
    int _resmark = p->mark;
14545
1.21M
    while (1) {
14546
1.21M
        int tmpvar_8 = _PyPegen_update_memo(p, _mark, primary_type, _res);
14547
1.21M
        if (tmpvar_8) {
14548
0
            p->level--;
14549
0
            return _res;
14550
0
        }
14551
1.21M
        p->mark = _mark;
14552
1.21M
        void *_raw = primary_raw(p);
14553
1.21M
        if (p->error_indicator) {
14554
36.1k
            p->level--;
14555
36.1k
            return NULL;
14556
36.1k
        }
14557
1.17M
        if (_raw == NULL || p->mark <= _resmark)
14558
687k
            break;
14559
492k
        _resmark = p->mark;
14560
492k
        _res = _raw;
14561
492k
    }
14562
687k
    p->mark = _resmark;
14563
687k
    p->level--;
14564
687k
    return _res;
14565
723k
}
14566
static expr_ty
14567
primary_raw(Parser *p)
14568
1.21M
{
14569
1.21M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
14570
1
        _Pypegen_stack_overflow(p);
14571
1
    }
14572
1.21M
    if (p->error_indicator) {
14573
2
        p->level--;
14574
2
        return NULL;
14575
2
    }
14576
1.21M
    expr_ty _res = NULL;
14577
1.21M
    int _mark = p->mark;
14578
1.21M
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
14579
0
        p->error_indicator = 1;
14580
0
        p->level--;
14581
0
        return NULL;
14582
0
    }
14583
1.21M
    int _start_lineno = p->tokens[_mark]->lineno;
14584
1.21M
    UNUSED(_start_lineno); // Only used by EXTRA macro
14585
1.21M
    int _start_col_offset = p->tokens[_mark]->col_offset;
14586
1.21M
    UNUSED(_start_col_offset); // Only used by EXTRA macro
14587
1.21M
    { // primary '.' NAME
14588
1.21M
        if (p->error_indicator) {
14589
0
            p->level--;
14590
0
            return NULL;
14591
0
        }
14592
1.21M
        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '.' NAME"));
14593
1.21M
        Token * _literal;
14594
1.21M
        expr_ty a;
14595
1.21M
        expr_ty b;
14596
1.21M
        if (
14597
1.21M
            (a = primary_rule(p))  // primary
14598
1.21M
            &&
14599
1.21M
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
14600
1.21M
            &&
14601
1.21M
            (b = _PyPegen_name_token(p))  // NAME
14602
1.21M
        )
14603
20.9k
        {
14604
20.9k
            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '.' NAME"));
14605
20.9k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14606
20.9k
            if (_token == NULL) {
14607
0
                p->level--;
14608
0
                return NULL;
14609
0
            }
14610
20.9k
            int _end_lineno = _token->end_lineno;
14611
20.9k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14612
20.9k
            int _end_col_offset = _token->end_col_offset;
14613
20.9k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14614
20.9k
            _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA );
14615
20.9k
            if (_res == NULL && PyErr_Occurred()) {
14616
0
                p->error_indicator = 1;
14617
0
                p->level--;
14618
0
                return NULL;
14619
0
            }
14620
20.9k
            goto done;
14621
20.9k
        }
14622
1.19M
        p->mark = _mark;
14623
1.19M
        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14624
1.19M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '.' NAME"));
14625
1.19M
    }
14626
0
    { // primary genexp
14627
1.19M
        if (p->error_indicator) {
14628
446
            p->level--;
14629
446
            return NULL;
14630
446
        }
14631
1.19M
        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary genexp"));
14632
1.19M
        expr_ty a;
14633
1.19M
        expr_ty b;
14634
1.19M
        if (
14635
1.19M
            (a = primary_rule(p))  // primary
14636
1.19M
            &&
14637
1.19M
            (b = genexp_rule(p))  // genexp
14638
1.19M
        )
14639
912
        {
14640
912
            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary genexp"));
14641
912
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14642
912
            if (_token == NULL) {
14643
0
                p->level--;
14644
0
                return NULL;
14645
0
            }
14646
912
            int _end_lineno = _token->end_lineno;
14647
912
            UNUSED(_end_lineno); // Only used by EXTRA macro
14648
912
            int _end_col_offset = _token->end_col_offset;
14649
912
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14650
912
            _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq* , ( asdl_expr_seq* ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA );
14651
912
            if (_res == NULL && PyErr_Occurred()) {
14652
0
                p->error_indicator = 1;
14653
0
                p->level--;
14654
0
                return NULL;
14655
0
            }
14656
912
            goto done;
14657
912
        }
14658
1.19M
        p->mark = _mark;
14659
1.19M
        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14660
1.19M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary genexp"));
14661
1.19M
    }
14662
0
    { // primary '(' arguments? ')'
14663
1.19M
        if (p->error_indicator) {
14664
4.03k
            p->level--;
14665
4.03k
            return NULL;
14666
4.03k
        }
14667
1.18M
        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'"));
14668
1.18M
        Token * _literal;
14669
1.18M
        Token * _literal_1;
14670
1.18M
        expr_ty a;
14671
1.18M
        void *b;
14672
1.18M
        if (
14673
1.18M
            (a = primary_rule(p))  // primary
14674
1.18M
            &&
14675
1.18M
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
14676
1.18M
            &&
14677
1.18M
            (b = arguments_rule(p), !p->error_indicator)  // arguments?
14678
1.18M
            &&
14679
1.18M
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
14680
1.18M
        )
14681
30.4k
        {
14682
30.4k
            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'"));
14683
30.4k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14684
30.4k
            if (_token == NULL) {
14685
0
                p->level--;
14686
0
                return NULL;
14687
0
            }
14688
30.4k
            int _end_lineno = _token->end_lineno;
14689
30.4k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14690
30.4k
            int _end_col_offset = _token->end_col_offset;
14691
30.4k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14692
30.4k
            _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA );
14693
30.4k
            if (_res == NULL && PyErr_Occurred()) {
14694
0
                p->error_indicator = 1;
14695
0
                p->level--;
14696
0
                return NULL;
14697
0
            }
14698
30.4k
            goto done;
14699
30.4k
        }
14700
1.15M
        p->mark = _mark;
14701
1.15M
        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14702
1.15M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '(' arguments? ')'"));
14703
1.15M
    }
14704
0
    { // primary '[' slices ']'
14705
1.15M
        if (p->error_indicator) {
14706
2.12k
            p->level--;
14707
2.12k
            return NULL;
14708
2.12k
        }
14709
1.15M
        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'"));
14710
1.15M
        Token * _literal;
14711
1.15M
        Token * _literal_1;
14712
1.15M
        expr_ty a;
14713
1.15M
        expr_ty b;
14714
1.15M
        if (
14715
1.15M
            (a = primary_rule(p))  // primary
14716
1.15M
            &&
14717
1.15M
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
14718
1.15M
            &&
14719
1.15M
            (b = slices_rule(p))  // slices
14720
1.15M
            &&
14721
1.15M
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
14722
1.15M
        )
14723
4.65k
        {
14724
4.65k
            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'"));
14725
4.65k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14726
4.65k
            if (_token == NULL) {
14727
0
                p->level--;
14728
0
                return NULL;
14729
0
            }
14730
4.65k
            int _end_lineno = _token->end_lineno;
14731
4.65k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14732
4.65k
            int _end_col_offset = _token->end_col_offset;
14733
4.65k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14734
4.65k
            _res = _PyAST_Subscript ( a , b , Load , EXTRA );
14735
4.65k
            if (_res == NULL && PyErr_Occurred()) {
14736
0
                p->error_indicator = 1;
14737
0
                p->level--;
14738
0
                return NULL;
14739
0
            }
14740
4.65k
            goto done;
14741
4.65k
        }
14742
1.15M
        p->mark = _mark;
14743
1.15M
        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14744
1.15M
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '[' slices ']'"));
14745
1.15M
    }
14746
0
    { // atom
14747
1.15M
        if (p->error_indicator) {
14748
568
            p->level--;
14749
568
            return NULL;
14750
568
        }
14751
1.15M
        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom"));
14752
1.15M
        expr_ty atom_var;
14753
1.15M
        if (
14754
1.15M
            (atom_var = atom_rule(p))  // atom
14755
1.15M
        )
14756
863k
        {
14757
863k
            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "atom"));
14758
863k
            _res = atom_var;
14759
863k
            goto done;
14760
863k
        }
14761
288k
        p->mark = _mark;
14762
288k
        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14763
288k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "atom"));
14764
288k
    }
14765
0
    _res = NULL;
14766
1.20M
  done:
14767
1.20M
    p->level--;
14768
1.20M
    return _res;
14769
288k
}
14770
14771
// slices: slice !',' | ','.(slice | starred_expression)+ ','?
14772
static expr_ty
14773
slices_rule(Parser *p)
14774
15.5k
{
14775
15.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
14776
0
        _Pypegen_stack_overflow(p);
14777
0
    }
14778
15.5k
    if (p->error_indicator) {
14779
0
        p->level--;
14780
0
        return NULL;
14781
0
    }
14782
15.5k
    expr_ty _res = NULL;
14783
15.5k
    int _mark = p->mark;
14784
15.5k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
14785
37
        p->error_indicator = 1;
14786
37
        p->level--;
14787
37
        return NULL;
14788
37
    }
14789
15.5k
    int _start_lineno = p->tokens[_mark]->lineno;
14790
15.5k
    UNUSED(_start_lineno); // Only used by EXTRA macro
14791
15.5k
    int _start_col_offset = p->tokens[_mark]->col_offset;
14792
15.5k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
14793
15.5k
    { // slice !','
14794
15.5k
        if (p->error_indicator) {
14795
0
            p->level--;
14796
0
            return NULL;
14797
0
        }
14798
15.5k
        D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice !','"));
14799
15.5k
        expr_ty a;
14800
15.5k
        if (
14801
15.5k
            (a = slice_rule(p))  // slice
14802
15.5k
            &&
14803
15.5k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12)  // token=','
14804
15.5k
        )
14805
10.4k
        {
14806
10.4k
            D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice !','"));
14807
10.4k
            _res = a;
14808
10.4k
            if (_res == NULL && PyErr_Occurred()) {
14809
0
                p->error_indicator = 1;
14810
0
                p->level--;
14811
0
                return NULL;
14812
0
            }
14813
10.4k
            goto done;
14814
10.4k
        }
14815
5.08k
        p->mark = _mark;
14816
5.08k
        D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ',
14817
5.08k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice !','"));
14818
5.08k
    }
14819
0
    { // ','.(slice | starred_expression)+ ','?
14820
5.08k
        if (p->error_indicator) {
14821
681
            p->level--;
14822
681
            return NULL;
14823
681
        }
14824
4.39k
        D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(slice | starred_expression)+ ','?"));
14825
4.39k
        void *_opt_var;
14826
4.39k
        UNUSED(_opt_var); // Silence compiler warnings
14827
4.39k
        asdl_expr_seq* a;
14828
4.39k
        if (
14829
4.39k
            (a = (asdl_expr_seq*)_gather_64_rule(p))  // ','.(slice | starred_expression)+
14830
4.39k
            &&
14831
4.39k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
14832
4.39k
        )
14833
2.50k
        {
14834
2.50k
            D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(slice | starred_expression)+ ','?"));
14835
2.50k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14836
2.50k
            if (_token == NULL) {
14837
0
                p->level--;
14838
0
                return NULL;
14839
0
            }
14840
2.50k
            int _end_lineno = _token->end_lineno;
14841
2.50k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14842
2.50k
            int _end_col_offset = _token->end_col_offset;
14843
2.50k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14844
2.50k
            _res = _PyAST_Tuple ( a , Load , EXTRA );
14845
2.50k
            if (_res == NULL && PyErr_Occurred()) {
14846
0
                p->error_indicator = 1;
14847
0
                p->level--;
14848
0
                return NULL;
14849
0
            }
14850
2.50k
            goto done;
14851
2.50k
        }
14852
1.89k
        p->mark = _mark;
14853
1.89k
        D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ',
14854
1.89k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(slice | starred_expression)+ ','?"));
14855
1.89k
    }
14856
0
    _res = NULL;
14857
14.8k
  done:
14858
14.8k
    p->level--;
14859
14.8k
    return _res;
14860
1.89k
}
14861
14862
// slice: expression? ':' expression? [':' expression?] | named_expression
14863
static expr_ty
14864
slice_rule(Parser *p)
14865
47.6k
{
14866
47.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
14867
1
        _Pypegen_stack_overflow(p);
14868
1
    }
14869
47.6k
    if (p->error_indicator) {
14870
1
        p->level--;
14871
1
        return NULL;
14872
1
    }
14873
47.6k
    expr_ty _res = NULL;
14874
47.6k
    int _mark = p->mark;
14875
47.6k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
14876
14
        p->error_indicator = 1;
14877
14
        p->level--;
14878
14
        return NULL;
14879
14
    }
14880
47.6k
    int _start_lineno = p->tokens[_mark]->lineno;
14881
47.6k
    UNUSED(_start_lineno); // Only used by EXTRA macro
14882
47.6k
    int _start_col_offset = p->tokens[_mark]->col_offset;
14883
47.6k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
14884
47.6k
    { // expression? ':' expression? [':' expression?]
14885
47.6k
        if (p->error_indicator) {
14886
0
            p->level--;
14887
0
            return NULL;
14888
0
        }
14889
47.6k
        D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]"));
14890
47.6k
        Token * _literal;
14891
47.6k
        void *a;
14892
47.6k
        void *b;
14893
47.6k
        void *c;
14894
47.6k
        if (
14895
47.6k
            (a = expression_rule(p), !p->error_indicator)  // expression?
14896
47.6k
            &&
14897
47.6k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
14898
47.6k
            &&
14899
47.6k
            (b = expression_rule(p), !p->error_indicator)  // expression?
14900
47.6k
            &&
14901
47.6k
            (c = _tmp_65_rule(p), !p->error_indicator)  // [':' expression?]
14902
47.6k
        )
14903
24.4k
        {
14904
24.4k
            D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]"));
14905
24.4k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14906
24.4k
            if (_token == NULL) {
14907
0
                p->level--;
14908
0
                return NULL;
14909
0
            }
14910
24.4k
            int _end_lineno = _token->end_lineno;
14911
24.4k
            UNUSED(_end_lineno); // Only used by EXTRA macro
14912
24.4k
            int _end_col_offset = _token->end_col_offset;
14913
24.4k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
14914
24.4k
            _res = _PyAST_Slice ( a , b , c , EXTRA );
14915
24.4k
            if (_res == NULL && PyErr_Occurred()) {
14916
0
                p->error_indicator = 1;
14917
0
                p->level--;
14918
0
                return NULL;
14919
0
            }
14920
24.4k
            goto done;
14921
24.4k
        }
14922
23.1k
        p->mark = _mark;
14923
23.1k
        D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ',
14924
23.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression? ':' expression? [':' expression?]"));
14925
23.1k
    }
14926
0
    { // named_expression
14927
23.1k
        if (p->error_indicator) {
14928
763
            p->level--;
14929
763
            return NULL;
14930
763
        }
14931
22.4k
        D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
14932
22.4k
        expr_ty a;
14933
22.4k
        if (
14934
22.4k
            (a = named_expression_rule(p))  // named_expression
14935
22.4k
        )
14936
17.1k
        {
14937
17.1k
            D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
14938
17.1k
            _res = a;
14939
17.1k
            if (_res == NULL && PyErr_Occurred()) {
14940
0
                p->error_indicator = 1;
14941
0
                p->level--;
14942
0
                return NULL;
14943
0
            }
14944
17.1k
            goto done;
14945
17.1k
        }
14946
5.23k
        p->mark = _mark;
14947
5.23k
        D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ',
14948
5.23k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
14949
5.23k
    }
14950
0
    _res = NULL;
14951
46.8k
  done:
14952
46.8k
    p->level--;
14953
46.8k
    return _res;
14954
5.23k
}
14955
14956
// atom:
14957
//     | NAME
14958
//     | 'True'
14959
//     | 'False'
14960
//     | 'None'
14961
//     | &(STRING | FSTRING_START | TSTRING_START) strings
14962
//     | NUMBER
14963
//     | &'(' (tuple | group | genexp)
14964
//     | &'[' (list | listcomp)
14965
//     | &'{' (dict | set | dictcomp | setcomp)
14966
//     | '...'
14967
static expr_ty
14968
atom_rule(Parser *p)
14969
1.41M
{
14970
1.41M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
14971
0
        _Pypegen_stack_overflow(p);
14972
0
    }
14973
1.41M
    if (p->error_indicator) {
14974
0
        p->level--;
14975
0
        return NULL;
14976
0
    }
14977
1.41M
    expr_ty _res = NULL;
14978
1.41M
    int _mark = p->mark;
14979
1.41M
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
14980
0
        p->error_indicator = 1;
14981
0
        p->level--;
14982
0
        return NULL;
14983
0
    }
14984
1.41M
    int _start_lineno = p->tokens[_mark]->lineno;
14985
1.41M
    UNUSED(_start_lineno); // Only used by EXTRA macro
14986
1.41M
    int _start_col_offset = p->tokens[_mark]->col_offset;
14987
1.41M
    UNUSED(_start_col_offset); // Only used by EXTRA macro
14988
1.41M
    { // NAME
14989
1.41M
        if (p->error_indicator) {
14990
0
            p->level--;
14991
0
            return NULL;
14992
0
        }
14993
1.41M
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
14994
1.41M
        expr_ty name_var;
14995
1.41M
        if (
14996
1.41M
            (name_var = _PyPegen_name_token(p))  // NAME
14997
1.41M
        )
14998
644k
        {
14999
644k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
15000
644k
            _res = name_var;
15001
644k
            goto done;
15002
644k
        }
15003
772k
        p->mark = _mark;
15004
772k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15005
772k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
15006
772k
    }
15007
0
    { // 'True'
15008
772k
        if (p->error_indicator) {
15009
0
            p->level--;
15010
0
            return NULL;
15011
0
        }
15012
772k
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
15013
772k
        Token * _keyword;
15014
772k
        if (
15015
772k
            (_keyword = _PyPegen_expect_token(p, 623))  // token='True'
15016
772k
        )
15017
3.37k
        {
15018
3.37k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
15019
3.37k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
15020
3.37k
            if (_token == NULL) {
15021
0
                p->level--;
15022
0
                return NULL;
15023
0
            }
15024
3.37k
            int _end_lineno = _token->end_lineno;
15025
3.37k
            UNUSED(_end_lineno); // Only used by EXTRA macro
15026
3.37k
            int _end_col_offset = _token->end_col_offset;
15027
3.37k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
15028
3.37k
            _res = _PyAST_Constant ( Py_True , NULL , EXTRA );
15029
3.37k
            if (_res == NULL && PyErr_Occurred()) {
15030
0
                p->error_indicator = 1;
15031
0
                p->level--;
15032
0
                return NULL;
15033
0
            }
15034
3.37k
            goto done;
15035
3.37k
        }
15036
769k
        p->mark = _mark;
15037
769k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15038
769k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
15039
769k
    }
15040
0
    { // 'False'
15041
769k
        if (p->error_indicator) {
15042
0
            p->level--;
15043
0
            return NULL;
15044
0
        }
15045
769k
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
15046
769k
        Token * _keyword;
15047
769k
        if (
15048
769k
            (_keyword = _PyPegen_expect_token(p, 625))  // token='False'
15049
769k
        )
15050
2.33k
        {
15051
2.33k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
15052
2.33k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
15053
2.33k
            if (_token == NULL) {
15054
0
                p->level--;
15055
0
                return NULL;
15056
0
            }
15057
2.33k
            int _end_lineno = _token->end_lineno;
15058
2.33k
            UNUSED(_end_lineno); // Only used by EXTRA macro
15059
2.33k
            int _end_col_offset = _token->end_col_offset;
15060
2.33k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
15061
2.33k
            _res = _PyAST_Constant ( Py_False , NULL , EXTRA );
15062
2.33k
            if (_res == NULL && PyErr_Occurred()) {
15063
0
                p->error_indicator = 1;
15064
0
                p->level--;
15065
0
                return NULL;
15066
0
            }
15067
2.33k
            goto done;
15068
2.33k
        }
15069
767k
        p->mark = _mark;
15070
767k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15071
767k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
15072
767k
    }
15073
0
    { // 'None'
15074
767k
        if (p->error_indicator) {
15075
0
            p->level--;
15076
0
            return NULL;
15077
0
        }
15078
767k
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
15079
767k
        Token * _keyword;
15080
767k
        if (
15081
767k
            (_keyword = _PyPegen_expect_token(p, 624))  // token='None'
15082
767k
        )
15083
7.78k
        {
15084
7.78k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
15085
7.78k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
15086
7.78k
            if (_token == NULL) {
15087
0
                p->level--;
15088
0
                return NULL;
15089
0
            }
15090
7.78k
            int _end_lineno = _token->end_lineno;
15091
7.78k
            UNUSED(_end_lineno); // Only used by EXTRA macro
15092
7.78k
            int _end_col_offset = _token->end_col_offset;
15093
7.78k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
15094
7.78k
            _res = _PyAST_Constant ( Py_None , NULL , EXTRA );
15095
7.78k
            if (_res == NULL && PyErr_Occurred()) {
15096
0
                p->error_indicator = 1;
15097
0
                p->level--;
15098
0
                return NULL;
15099
0
            }
15100
7.78k
            goto done;
15101
7.78k
        }
15102
759k
        p->mark = _mark;
15103
759k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15104
759k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
15105
759k
    }
15106
0
    { // &(STRING | FSTRING_START | TSTRING_START) strings
15107
759k
        if (p->error_indicator) {
15108
0
            p->level--;
15109
0
            return NULL;
15110
0
        }
15111
759k
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
15112
759k
        expr_ty strings_var;
15113
759k
        if (
15114
759k
            _PyPegen_lookahead(1, _tmp_42_rule, p)
15115
759k
            &&
15116
759k
            (strings_var = strings_rule(p))  // strings
15117
759k
        )
15118
99.9k
        {
15119
99.9k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
15120
99.9k
            _res = strings_var;
15121
99.9k
            goto done;
15122
99.9k
        }
15123
659k
        p->mark = _mark;
15124
659k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15125
659k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
15126
659k
    }
15127
0
    { // NUMBER
15128
659k
        if (p->error_indicator) {
15129
3.61k
            p->level--;
15130
3.61k
            return NULL;
15131
3.61k
        }
15132
655k
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
15133
655k
        expr_ty number_var;
15134
655k
        if (
15135
655k
            (number_var = _PyPegen_number_token(p))  // NUMBER
15136
655k
        )
15137
211k
        {
15138
211k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER"));
15139
211k
            _res = number_var;
15140
211k
            goto done;
15141
211k
        }
15142
444k
        p->mark = _mark;
15143
444k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15144
444k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER"));
15145
444k
    }
15146
0
    { // &'(' (tuple | group | genexp)
15147
444k
        if (p->error_indicator) {
15148
19
            p->level--;
15149
19
            return NULL;
15150
19
        }
15151
444k
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)"));
15152
444k
        void *_tmp_66_var;
15153
444k
        if (
15154
444k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 7)  // token='('
15155
444k
            &&
15156
444k
            (_tmp_66_var = _tmp_66_rule(p))  // tuple | group | genexp
15157
444k
        )
15158
45.6k
        {
15159
45.6k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)"));
15160
45.6k
            _res = _tmp_66_var;
15161
45.6k
            goto done;
15162
45.6k
        }
15163
399k
        p->mark = _mark;
15164
399k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15165
399k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'(' (tuple | group | genexp)"));
15166
399k
    }
15167
0
    { // &'[' (list | listcomp)
15168
399k
        if (p->error_indicator) {
15169
7.42k
            p->level--;
15170
7.42k
            return NULL;
15171
7.42k
        }
15172
391k
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)"));
15173
391k
        void *_tmp_67_var;
15174
391k
        if (
15175
391k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 9)  // token='['
15176
391k
            &&
15177
391k
            (_tmp_67_var = _tmp_67_rule(p))  // list | listcomp
15178
391k
        )
15179
15.4k
        {
15180
15.4k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)"));
15181
15.4k
            _res = _tmp_67_var;
15182
15.4k
            goto done;
15183
15.4k
        }
15184
376k
        p->mark = _mark;
15185
376k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15186
376k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'[' (list | listcomp)"));
15187
376k
    }
15188
0
    { // &'{' (dict | set | dictcomp | setcomp)
15189
376k
        if (p->error_indicator) {
15190
11.0k
            p->level--;
15191
11.0k
            return NULL;
15192
11.0k
        }
15193
365k
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)"));
15194
365k
        void *_tmp_68_var;
15195
365k
        if (
15196
365k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 25)  // token='{'
15197
365k
            &&
15198
365k
            (_tmp_68_var = _tmp_68_rule(p))  // dict | set | dictcomp | setcomp
15199
365k
        )
15200
6.99k
        {
15201
6.99k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)"));
15202
6.99k
            _res = _tmp_68_var;
15203
6.99k
            goto done;
15204
6.99k
        }
15205
358k
        p->mark = _mark;
15206
358k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15207
358k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)"));
15208
358k
    }
15209
0
    { // '...'
15210
358k
        if (p->error_indicator) {
15211
9.62k
            p->level--;
15212
9.62k
            return NULL;
15213
9.62k
        }
15214
348k
        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
15215
348k
        Token * _literal;
15216
348k
        if (
15217
348k
            (_literal = _PyPegen_expect_token(p, 52))  // token='...'
15218
348k
        )
15219
1.26k
        {
15220
1.26k
            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'"));
15221
1.26k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
15222
1.26k
            if (_token == NULL) {
15223
0
                p->level--;
15224
0
                return NULL;
15225
0
            }
15226
1.26k
            int _end_lineno = _token->end_lineno;
15227
1.26k
            UNUSED(_end_lineno); // Only used by EXTRA macro
15228
1.26k
            int _end_col_offset = _token->end_col_offset;
15229
1.26k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
15230
1.26k
            _res = _PyAST_Constant ( Py_Ellipsis , NULL , EXTRA );
15231
1.26k
            if (_res == NULL && PyErr_Occurred()) {
15232
0
                p->error_indicator = 1;
15233
0
                p->level--;
15234
0
                return NULL;
15235
0
            }
15236
1.26k
            goto done;
15237
1.26k
        }
15238
347k
        p->mark = _mark;
15239
347k
        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15240
347k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'"));
15241
347k
    }
15242
0
    _res = NULL;
15243
1.38M
  done:
15244
1.38M
    p->level--;
15245
1.38M
    return _res;
15246
347k
}
15247
15248
// group: '(' (yield_expr | named_expression) ')' | invalid_group
15249
static expr_ty
15250
group_rule(Parser *p)
15251
30.0k
{
15252
30.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
15253
0
        _Pypegen_stack_overflow(p);
15254
0
    }
15255
30.0k
    if (p->error_indicator) {
15256
0
        p->level--;
15257
0
        return NULL;
15258
0
    }
15259
30.0k
    expr_ty _res = NULL;
15260
30.0k
    int _mark = p->mark;
15261
30.0k
    { // '(' (yield_expr | named_expression) ')'
15262
30.0k
        if (p->error_indicator) {
15263
0
            p->level--;
15264
0
            return NULL;
15265
0
        }
15266
30.0k
        D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
15267
30.0k
        Token * _literal;
15268
30.0k
        Token * _literal_1;
15269
30.0k
        void *a;
15270
30.0k
        if (
15271
30.0k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
15272
30.0k
            &&
15273
30.0k
            (a = _tmp_69_rule(p))  // yield_expr | named_expression
15274
30.0k
            &&
15275
30.0k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
15276
30.0k
        )
15277
7.03k
        {
15278
7.03k
            D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
15279
7.03k
            _res = a;
15280
7.03k
            if (_res == NULL && PyErr_Occurred()) {
15281
0
                p->error_indicator = 1;
15282
0
                p->level--;
15283
0
                return NULL;
15284
0
            }
15285
7.03k
            goto done;
15286
7.03k
        }
15287
22.9k
        p->mark = _mark;
15288
22.9k
        D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ',
15289
22.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
15290
22.9k
    }
15291
22.9k
    if (p->call_invalid_rules) { // invalid_group
15292
8.14k
        if (p->error_indicator) {
15293
176
            p->level--;
15294
176
            return NULL;
15295
176
        }
15296
7.96k
        D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_group"));
15297
7.96k
        void *invalid_group_var;
15298
7.96k
        if (
15299
7.96k
            (invalid_group_var = invalid_group_rule(p))  // invalid_group
15300
7.96k
        )
15301
0
        {
15302
0
            D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_group"));
15303
0
            _res = invalid_group_var;
15304
0
            goto done;
15305
0
        }
15306
7.96k
        p->mark = _mark;
15307
7.96k
        D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ',
15308
7.96k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_group"));
15309
7.96k
    }
15310
22.8k
    _res = NULL;
15311
29.8k
  done:
15312
29.8k
    p->level--;
15313
29.8k
    return _res;
15314
22.8k
}
15315
15316
// lambdef: 'lambda' lambda_params? ':' expression
15317
static expr_ty
15318
lambdef_rule(Parser *p)
15319
295k
{
15320
295k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
15321
0
        _Pypegen_stack_overflow(p);
15322
0
    }
15323
295k
    if (p->error_indicator) {
15324
0
        p->level--;
15325
0
        return NULL;
15326
0
    }
15327
295k
    expr_ty _res = NULL;
15328
295k
    int _mark = p->mark;
15329
295k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
15330
0
        p->error_indicator = 1;
15331
0
        p->level--;
15332
0
        return NULL;
15333
0
    }
15334
295k
    int _start_lineno = p->tokens[_mark]->lineno;
15335
295k
    UNUSED(_start_lineno); // Only used by EXTRA macro
15336
295k
    int _start_col_offset = p->tokens[_mark]->col_offset;
15337
295k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
15338
295k
    { // 'lambda' lambda_params? ':' expression
15339
295k
        if (p->error_indicator) {
15340
0
            p->level--;
15341
0
            return NULL;
15342
0
        }
15343
295k
        D(fprintf(stderr, "%*c> lambdef[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression"));
15344
295k
        Token * _keyword;
15345
295k
        Token * _literal;
15346
295k
        void *a;
15347
295k
        expr_ty b;
15348
295k
        if (
15349
295k
            (_keyword = _PyPegen_expect_token(p, 622))  // token='lambda'
15350
295k
            &&
15351
295k
            (a = lambda_params_rule(p), !p->error_indicator)  // lambda_params?
15352
295k
            &&
15353
295k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
15354
295k
            &&
15355
295k
            (b = expression_rule(p))  // expression
15356
295k
        )
15357
2.31k
        {
15358
2.31k
            D(fprintf(stderr, "%*c+ lambdef[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression"));
15359
2.31k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
15360
2.31k
            if (_token == NULL) {
15361
0
                p->level--;
15362
0
                return NULL;
15363
0
            }
15364
2.31k
            int _end_lineno = _token->end_lineno;
15365
2.31k
            UNUSED(_end_lineno); // Only used by EXTRA macro
15366
2.31k
            int _end_col_offset = _token->end_col_offset;
15367
2.31k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
15368
2.31k
            _res = _PyAST_Lambda ( ( a ) ? a : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , EXTRA );
15369
2.31k
            if (_res == NULL && PyErr_Occurred()) {
15370
0
                p->error_indicator = 1;
15371
0
                p->level--;
15372
0
                return NULL;
15373
0
            }
15374
2.31k
            goto done;
15375
2.31k
        }
15376
292k
        p->mark = _mark;
15377
292k
        D(fprintf(stderr, "%*c%s lambdef[%d-%d]: %s failed!\n", p->level, ' ',
15378
292k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' expression"));
15379
292k
    }
15380
0
    _res = NULL;
15381
295k
  done:
15382
295k
    p->level--;
15383
295k
    return _res;
15384
292k
}
15385
15386
// lambda_params: invalid_lambda_parameters | lambda_parameters
15387
static arguments_ty
15388
lambda_params_rule(Parser *p)
15389
12.2k
{
15390
12.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
15391
0
        _Pypegen_stack_overflow(p);
15392
0
    }
15393
12.2k
    if (p->error_indicator) {
15394
0
        p->level--;
15395
0
        return NULL;
15396
0
    }
15397
12.2k
    arguments_ty _res = NULL;
15398
12.2k
    int _mark = p->mark;
15399
12.2k
    if (p->call_invalid_rules) { // invalid_lambda_parameters
15400
7.76k
        if (p->error_indicator) {
15401
0
            p->level--;
15402
0
            return NULL;
15403
0
        }
15404
7.76k
        D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters"));
15405
7.76k
        void *invalid_lambda_parameters_var;
15406
7.76k
        if (
15407
7.76k
            (invalid_lambda_parameters_var = invalid_lambda_parameters_rule(p))  // invalid_lambda_parameters
15408
7.76k
        )
15409
0
        {
15410
0
            D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters"));
15411
0
            _res = invalid_lambda_parameters_var;
15412
0
            goto done;
15413
0
        }
15414
7.76k
        p->mark = _mark;
15415
7.76k
        D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ',
15416
7.76k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_parameters"));
15417
7.76k
    }
15418
12.2k
    { // lambda_parameters
15419
12.2k
        if (p->error_indicator) {
15420
691
            p->level--;
15421
691
            return NULL;
15422
691
        }
15423
11.5k
        D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_parameters"));
15424
11.5k
        arguments_ty lambda_parameters_var;
15425
11.5k
        if (
15426
11.5k
            (lambda_parameters_var = lambda_parameters_rule(p))  // lambda_parameters
15427
11.5k
        )
15428
5.91k
        {
15429
5.91k
            D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_parameters"));
15430
5.91k
            _res = lambda_parameters_var;
15431
5.91k
            goto done;
15432
5.91k
        }
15433
5.68k
        p->mark = _mark;
15434
5.68k
        D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ',
15435
5.68k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_parameters"));
15436
5.68k
    }
15437
0
    _res = NULL;
15438
11.5k
  done:
15439
11.5k
    p->level--;
15440
11.5k
    return _res;
15441
5.68k
}
15442
15443
// lambda_parameters:
15444
//     | lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?
15445
//     | lambda_slash_with_default lambda_param_with_default* lambda_star_etc?
15446
//     | lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?
15447
//     | lambda_param_with_default+ lambda_star_etc?
15448
//     | lambda_star_etc
15449
static arguments_ty
15450
lambda_parameters_rule(Parser *p)
15451
11.5k
{
15452
11.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
15453
0
        _Pypegen_stack_overflow(p);
15454
0
    }
15455
11.5k
    if (p->error_indicator) {
15456
0
        p->level--;
15457
0
        return NULL;
15458
0
    }
15459
11.5k
    arguments_ty _res = NULL;
15460
11.5k
    int _mark = p->mark;
15461
11.5k
    { // lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?
15462
11.5k
        if (p->error_indicator) {
15463
0
            p->level--;
15464
0
            return NULL;
15465
0
        }
15466
11.5k
        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
15467
11.5k
        asdl_arg_seq* a;
15468
11.5k
        asdl_arg_seq* b;
15469
11.5k
        asdl_seq * c;
15470
11.5k
        void *d;
15471
11.5k
        if (
15472
11.5k
            (a = lambda_slash_no_default_rule(p))  // lambda_slash_no_default
15473
11.5k
            &&
15474
11.5k
            (b = (asdl_arg_seq*)_loop0_70_rule(p))  // lambda_param_no_default*
15475
11.5k
            &&
15476
11.5k
            (c = _loop0_71_rule(p))  // lambda_param_with_default*
15477
11.5k
            &&
15478
11.5k
            (d = lambda_star_etc_rule(p), !p->error_indicator)  // lambda_star_etc?
15479
11.5k
        )
15480
481
        {
15481
481
            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
15482
481
            _res = CHECK_VERSION ( arguments_ty , 8 , "Positional-only parameters are" , _PyPegen_make_arguments ( p , a , NULL , b , c , d ) );
15483
481
            if (_res == NULL && PyErr_Occurred()) {
15484
0
                p->error_indicator = 1;
15485
0
                p->level--;
15486
0
                return NULL;
15487
0
            }
15488
481
            goto done;
15489
481
        }
15490
11.1k
        p->mark = _mark;
15491
11.1k
        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15492
11.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
15493
11.1k
    }
15494
0
    { // lambda_slash_with_default lambda_param_with_default* lambda_star_etc?
15495
11.1k
        if (p->error_indicator) {
15496
98
            p->level--;
15497
98
            return NULL;
15498
98
        }
15499
11.0k
        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
15500
11.0k
        SlashWithDefault* a;
15501
11.0k
        asdl_seq * b;
15502
11.0k
        void *c;
15503
11.0k
        if (
15504
11.0k
            (a = lambda_slash_with_default_rule(p))  // lambda_slash_with_default
15505
11.0k
            &&
15506
11.0k
            (b = _loop0_71_rule(p))  // lambda_param_with_default*
15507
11.0k
            &&
15508
11.0k
            (c = lambda_star_etc_rule(p), !p->error_indicator)  // lambda_star_etc?
15509
11.0k
        )
15510
1.00k
        {
15511
1.00k
            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
15512
1.00k
            _res = CHECK_VERSION ( arguments_ty , 8 , "Positional-only parameters are" , _PyPegen_make_arguments ( p , NULL , a , NULL , b , c ) );
15513
1.00k
            if (_res == NULL && PyErr_Occurred()) {
15514
0
                p->error_indicator = 1;
15515
0
                p->level--;
15516
0
                return NULL;
15517
0
            }
15518
1.00k
            goto done;
15519
1.00k
        }
15520
10.0k
        p->mark = _mark;
15521
10.0k
        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15522
10.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
15523
10.0k
    }
15524
0
    { // lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?
15525
10.0k
        if (p->error_indicator) {
15526
359
            p->level--;
15527
359
            return NULL;
15528
359
        }
15529
9.65k
        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
15530
9.65k
        asdl_arg_seq* a;
15531
9.65k
        asdl_seq * b;
15532
9.65k
        void *c;
15533
9.65k
        if (
15534
9.65k
            (a = (asdl_arg_seq*)_loop1_72_rule(p))  // lambda_param_no_default+
15535
9.65k
            &&
15536
9.65k
            (b = _loop0_71_rule(p))  // lambda_param_with_default*
15537
9.65k
            &&
15538
9.65k
            (c = lambda_star_etc_rule(p), !p->error_indicator)  // lambda_star_etc?
15539
9.65k
        )
15540
1.34k
        {
15541
1.34k
            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
15542
1.34k
            _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c );
15543
1.34k
            if (_res == NULL && PyErr_Occurred()) {
15544
0
                p->error_indicator = 1;
15545
0
                p->level--;
15546
0
                return NULL;
15547
0
            }
15548
1.34k
            goto done;
15549
1.34k
        }
15550
8.30k
        p->mark = _mark;
15551
8.30k
        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15552
8.30k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
15553
8.30k
    }
15554
0
    { // lambda_param_with_default+ lambda_star_etc?
15555
8.30k
        if (p->error_indicator) {
15556
41
            p->level--;
15557
41
            return NULL;
15558
41
        }
15559
8.26k
        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
15560
8.26k
        asdl_seq * a;
15561
8.26k
        void *b;
15562
8.26k
        if (
15563
8.26k
            (a = _loop1_73_rule(p))  // lambda_param_with_default+
15564
8.26k
            &&
15565
8.26k
            (b = lambda_star_etc_rule(p), !p->error_indicator)  // lambda_star_etc?
15566
8.26k
        )
15567
1.56k
        {
15568
1.56k
            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
15569
1.56k
            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b );
15570
1.56k
            if (_res == NULL && PyErr_Occurred()) {
15571
0
                p->error_indicator = 1;
15572
0
                p->level--;
15573
0
                return NULL;
15574
0
            }
15575
1.56k
            goto done;
15576
1.56k
        }
15577
6.70k
        p->mark = _mark;
15578
6.70k
        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15579
6.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
15580
6.70k
    }
15581
0
    { // lambda_star_etc
15582
6.70k
        if (p->error_indicator) {
15583
67
            p->level--;
15584
67
            return NULL;
15585
67
        }
15586
6.63k
        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_star_etc"));
15587
6.63k
        StarEtc* a;
15588
6.63k
        if (
15589
6.63k
            (a = lambda_star_etc_rule(p))  // lambda_star_etc
15590
6.63k
        )
15591
1.51k
        {
15592
1.51k
            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_star_etc"));
15593
1.51k
            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a );
15594
1.51k
            if (_res == NULL && PyErr_Occurred()) {
15595
0
                p->error_indicator = 1;
15596
0
                p->level--;
15597
0
                return NULL;
15598
0
            }
15599
1.51k
            goto done;
15600
1.51k
        }
15601
5.11k
        p->mark = _mark;
15602
5.11k
        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15603
5.11k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_star_etc"));
15604
5.11k
    }
15605
0
    _res = NULL;
15606
11.0k
  done:
15607
11.0k
    p->level--;
15608
11.0k
    return _res;
15609
5.11k
}
15610
15611
// lambda_slash_no_default:
15612
//     | lambda_param_no_default+ '/' ','
15613
//     | lambda_param_no_default+ '/' &':'
15614
static asdl_arg_seq*
15615
lambda_slash_no_default_rule(Parser *p)
15616
33.9k
{
15617
33.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
15618
0
        _Pypegen_stack_overflow(p);
15619
0
    }
15620
33.9k
    if (p->error_indicator) {
15621
0
        p->level--;
15622
0
        return NULL;
15623
0
    }
15624
33.9k
    asdl_arg_seq* _res = NULL;
15625
33.9k
    int _mark = p->mark;
15626
33.9k
    { // lambda_param_no_default+ '/' ','
15627
33.9k
        if (p->error_indicator) {
15628
0
            p->level--;
15629
0
            return NULL;
15630
0
        }
15631
33.9k
        D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','"));
15632
33.9k
        Token * _literal;
15633
33.9k
        Token * _literal_1;
15634
33.9k
        asdl_arg_seq* a;
15635
33.9k
        if (
15636
33.9k
            (a = (asdl_arg_seq*)_loop1_72_rule(p))  // lambda_param_no_default+
15637
33.9k
            &&
15638
33.9k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
15639
33.9k
            &&
15640
33.9k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
15641
33.9k
        )
15642
558
        {
15643
558
            D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','"));
15644
558
            _res = a;
15645
558
            if (_res == NULL && PyErr_Occurred()) {
15646
0
                p->error_indicator = 1;
15647
0
                p->level--;
15648
0
                return NULL;
15649
0
            }
15650
558
            goto done;
15651
558
        }
15652
33.4k
        p->mark = _mark;
15653
33.4k
        D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
15654
33.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' ','"));
15655
33.4k
    }
15656
0
    { // lambda_param_no_default+ '/' &':'
15657
33.4k
        if (p->error_indicator) {
15658
14
            p->level--;
15659
14
            return NULL;
15660
14
        }
15661
33.4k
        D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
15662
33.4k
        Token * _literal;
15663
33.4k
        asdl_arg_seq* a;
15664
33.4k
        if (
15665
33.4k
            (a = (asdl_arg_seq*)_loop1_72_rule(p))  // lambda_param_no_default+
15666
33.4k
            &&
15667
33.4k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
15668
33.4k
            &&
15669
33.4k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
15670
33.4k
        )
15671
1.18k
        {
15672
1.18k
            D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
15673
1.18k
            _res = a;
15674
1.18k
            if (_res == NULL && PyErr_Occurred()) {
15675
0
                p->error_indicator = 1;
15676
0
                p->level--;
15677
0
                return NULL;
15678
0
            }
15679
1.18k
            goto done;
15680
1.18k
        }
15681
32.2k
        p->mark = _mark;
15682
32.2k
        D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
15683
32.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
15684
32.2k
    }
15685
0
    _res = NULL;
15686
33.9k
  done:
15687
33.9k
    p->level--;
15688
33.9k
    return _res;
15689
32.2k
}
15690
15691
// lambda_slash_with_default:
15692
//     | lambda_param_no_default* lambda_param_with_default+ '/' ','
15693
//     | lambda_param_no_default* lambda_param_with_default+ '/' &':'
15694
static SlashWithDefault*
15695
lambda_slash_with_default_rule(Parser *p)
15696
32.6k
{
15697
32.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
15698
0
        _Pypegen_stack_overflow(p);
15699
0
    }
15700
32.6k
    if (p->error_indicator) {
15701
0
        p->level--;
15702
0
        return NULL;
15703
0
    }
15704
32.6k
    SlashWithDefault* _res = NULL;
15705
32.6k
    int _mark = p->mark;
15706
32.6k
    { // lambda_param_no_default* lambda_param_with_default+ '/' ','
15707
32.6k
        if (p->error_indicator) {
15708
0
            p->level--;
15709
0
            return NULL;
15710
0
        }
15711
32.6k
        D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
15712
32.6k
        Token * _literal;
15713
32.6k
        Token * _literal_1;
15714
32.6k
        asdl_seq * a;
15715
32.6k
        asdl_seq * b;
15716
32.6k
        if (
15717
32.6k
            (a = _loop0_70_rule(p))  // lambda_param_no_default*
15718
32.6k
            &&
15719
32.6k
            (b = _loop1_73_rule(p))  // lambda_param_with_default+
15720
32.6k
            &&
15721
32.6k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
15722
32.6k
            &&
15723
32.6k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
15724
32.6k
        )
15725
1.89k
        {
15726
1.89k
            D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
15727
1.89k
            _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq* ) a , b );
15728
1.89k
            if (_res == NULL && PyErr_Occurred()) {
15729
0
                p->error_indicator = 1;
15730
0
                p->level--;
15731
0
                return NULL;
15732
0
            }
15733
1.89k
            goto done;
15734
1.89k
        }
15735
30.7k
        p->mark = _mark;
15736
30.7k
        D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
15737
30.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
15738
30.7k
    }
15739
0
    { // lambda_param_no_default* lambda_param_with_default+ '/' &':'
15740
30.7k
        if (p->error_indicator) {
15741
558
            p->level--;
15742
558
            return NULL;
15743
558
        }
15744
30.1k
        D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
15745
30.1k
        Token * _literal;
15746
30.1k
        asdl_seq * a;
15747
30.1k
        asdl_seq * b;
15748
30.1k
        if (
15749
30.1k
            (a = _loop0_70_rule(p))  // lambda_param_no_default*
15750
30.1k
            &&
15751
30.1k
            (b = _loop1_73_rule(p))  // lambda_param_with_default+
15752
30.1k
            &&
15753
30.1k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
15754
30.1k
            &&
15755
30.1k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
15756
30.1k
        )
15757
1.28k
        {
15758
1.28k
            D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
15759
1.28k
            _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq* ) a , b );
15760
1.28k
            if (_res == NULL && PyErr_Occurred()) {
15761
0
                p->error_indicator = 1;
15762
0
                p->level--;
15763
0
                return NULL;
15764
0
            }
15765
1.28k
            goto done;
15766
1.28k
        }
15767
28.8k
        p->mark = _mark;
15768
28.8k
        D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
15769
28.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
15770
28.8k
    }
15771
0
    _res = NULL;
15772
32.0k
  done:
15773
32.0k
    p->level--;
15774
32.0k
    return _res;
15775
28.8k
}
15776
15777
// lambda_star_etc:
15778
//     | invalid_lambda_star_etc
15779
//     | '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?
15780
//     | '*' ',' lambda_param_maybe_default+ lambda_kwds?
15781
//     | lambda_kwds
15782
static StarEtc*
15783
lambda_star_etc_rule(Parser *p)
15784
11.3k
{
15785
11.3k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
15786
0
        _Pypegen_stack_overflow(p);
15787
0
    }
15788
11.3k
    if (p->error_indicator) {
15789
195
        p->level--;
15790
195
        return NULL;
15791
195
    }
15792
11.1k
    StarEtc* _res = NULL;
15793
11.1k
    int _mark = p->mark;
15794
11.1k
    if (p->call_invalid_rules) { // invalid_lambda_star_etc
15795
7.07k
        if (p->error_indicator) {
15796
0
            p->level--;
15797
0
            return NULL;
15798
0
        }
15799
7.07k
        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc"));
15800
7.07k
        void *invalid_lambda_star_etc_var;
15801
7.07k
        if (
15802
7.07k
            (invalid_lambda_star_etc_var = invalid_lambda_star_etc_rule(p))  // invalid_lambda_star_etc
15803
7.07k
        )
15804
0
        {
15805
0
            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc"));
15806
0
            _res = invalid_lambda_star_etc_var;
15807
0
            goto done;
15808
0
        }
15809
7.07k
        p->mark = _mark;
15810
7.07k
        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
15811
7.07k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_star_etc"));
15812
7.07k
    }
15813
11.1k
    { // '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?
15814
11.1k
        if (p->error_indicator) {
15815
19
            p->level--;
15816
19
            return NULL;
15817
19
        }
15818
11.1k
        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
15819
11.1k
        Token * _literal;
15820
11.1k
        arg_ty a;
15821
11.1k
        asdl_seq * b;
15822
11.1k
        void *c;
15823
11.1k
        if (
15824
11.1k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
15825
11.1k
            &&
15826
11.1k
            (a = lambda_param_no_default_rule(p))  // lambda_param_no_default
15827
11.1k
            &&
15828
11.1k
            (b = _loop0_74_rule(p))  // lambda_param_maybe_default*
15829
11.1k
            &&
15830
11.1k
            (c = lambda_kwds_rule(p), !p->error_indicator)  // lambda_kwds?
15831
11.1k
        )
15832
1.06k
        {
15833
1.06k
            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
15834
1.06k
            _res = _PyPegen_star_etc ( p , a , b , c );
15835
1.06k
            if (_res == NULL && PyErr_Occurred()) {
15836
0
                p->error_indicator = 1;
15837
0
                p->level--;
15838
0
                return NULL;
15839
0
            }
15840
1.06k
            goto done;
15841
1.06k
        }
15842
10.0k
        p->mark = _mark;
15843
10.0k
        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
15844
10.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
15845
10.0k
    }
15846
0
    { // '*' ',' lambda_param_maybe_default+ lambda_kwds?
15847
10.0k
        if (p->error_indicator) {
15848
55
            p->level--;
15849
55
            return NULL;
15850
55
        }
15851
10.0k
        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
15852
10.0k
        Token * _literal;
15853
10.0k
        Token * _literal_1;
15854
10.0k
        asdl_seq * b;
15855
10.0k
        void *c;
15856
10.0k
        if (
15857
10.0k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
15858
10.0k
            &&
15859
10.0k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
15860
10.0k
            &&
15861
10.0k
            (b = _loop1_75_rule(p))  // lambda_param_maybe_default+
15862
10.0k
            &&
15863
10.0k
            (c = lambda_kwds_rule(p), !p->error_indicator)  // lambda_kwds?
15864
10.0k
        )
15865
330
        {
15866
330
            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
15867
330
            _res = _PyPegen_star_etc ( p , NULL , b , c );
15868
330
            if (_res == NULL && PyErr_Occurred()) {
15869
0
                p->error_indicator = 1;
15870
0
                p->level--;
15871
0
                return NULL;
15872
0
            }
15873
330
            goto done;
15874
330
        }
15875
9.67k
        p->mark = _mark;
15876
9.67k
        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
15877
9.67k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
15878
9.67k
    }
15879
0
    { // lambda_kwds
15880
9.67k
        if (p->error_indicator) {
15881
405
            p->level--;
15882
405
            return NULL;
15883
405
        }
15884
9.26k
        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_kwds"));
15885
9.26k
        arg_ty a;
15886
9.26k
        if (
15887
9.26k
            (a = lambda_kwds_rule(p))  // lambda_kwds
15888
9.26k
        )
15889
340
        {
15890
340
            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_kwds"));
15891
340
            _res = _PyPegen_star_etc ( p , NULL , NULL , a );
15892
340
            if (_res == NULL && PyErr_Occurred()) {
15893
0
                p->error_indicator = 1;
15894
0
                p->level--;
15895
0
                return NULL;
15896
0
            }
15897
340
            goto done;
15898
340
        }
15899
8.92k
        p->mark = _mark;
15900
8.92k
        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
15901
8.92k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_kwds"));
15902
8.92k
    }
15903
0
    _res = NULL;
15904
10.6k
  done:
15905
10.6k
    p->level--;
15906
10.6k
    return _res;
15907
8.92k
}
15908
15909
// lambda_kwds: invalid_lambda_kwds | '**' lambda_param_no_default
15910
static arg_ty
15911
lambda_kwds_rule(Parser *p)
15912
10.7k
{
15913
10.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
15914
0
        _Pypegen_stack_overflow(p);
15915
0
    }
15916
10.7k
    if (p->error_indicator) {
15917
48
        p->level--;
15918
48
        return NULL;
15919
48
    }
15920
10.6k
    arg_ty _res = NULL;
15921
10.6k
    int _mark = p->mark;
15922
10.6k
    if (p->call_invalid_rules) { // invalid_lambda_kwds
15923
7.05k
        if (p->error_indicator) {
15924
0
            p->level--;
15925
0
            return NULL;
15926
0
        }
15927
7.05k
        D(fprintf(stderr, "%*c> lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_kwds"));
15928
7.05k
        void *invalid_lambda_kwds_var;
15929
7.05k
        if (
15930
7.05k
            (invalid_lambda_kwds_var = invalid_lambda_kwds_rule(p))  // invalid_lambda_kwds
15931
7.05k
        )
15932
0
        {
15933
0
            D(fprintf(stderr, "%*c+ lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_kwds"));
15934
0
            _res = invalid_lambda_kwds_var;
15935
0
            goto done;
15936
0
        }
15937
7.05k
        p->mark = _mark;
15938
7.05k
        D(fprintf(stderr, "%*c%s lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
15939
7.05k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_kwds"));
15940
7.05k
    }
15941
10.6k
    { // '**' lambda_param_no_default
15942
10.6k
        if (p->error_indicator) {
15943
5
            p->level--;
15944
5
            return NULL;
15945
5
        }
15946
10.6k
        D(fprintf(stderr, "%*c> lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default"));
15947
10.6k
        Token * _literal;
15948
10.6k
        arg_ty a;
15949
10.6k
        if (
15950
10.6k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
15951
10.6k
            &&
15952
10.6k
            (a = lambda_param_no_default_rule(p))  // lambda_param_no_default
15953
10.6k
        )
15954
340
        {
15955
340
            D(fprintf(stderr, "%*c+ lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default"));
15956
340
            _res = a;
15957
340
            if (_res == NULL && PyErr_Occurred()) {
15958
0
                p->error_indicator = 1;
15959
0
                p->level--;
15960
0
                return NULL;
15961
0
            }
15962
340
            goto done;
15963
340
        }
15964
10.3k
        p->mark = _mark;
15965
10.3k
        D(fprintf(stderr, "%*c%s lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
15966
10.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param_no_default"));
15967
10.3k
    }
15968
0
    _res = NULL;
15969
10.6k
  done:
15970
10.6k
    p->level--;
15971
10.6k
    return _res;
15972
10.3k
}
15973
15974
// lambda_param_no_default: lambda_param ',' | lambda_param &':'
15975
static arg_ty
15976
lambda_param_no_default_rule(Parser *p)
15977
310k
{
15978
310k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
15979
0
        _Pypegen_stack_overflow(p);
15980
0
    }
15981
310k
    if (p->error_indicator) {
15982
0
        p->level--;
15983
0
        return NULL;
15984
0
    }
15985
310k
    arg_ty _res = NULL;
15986
310k
    int _mark = p->mark;
15987
310k
    { // lambda_param ','
15988
310k
        if (p->error_indicator) {
15989
0
            p->level--;
15990
0
            return NULL;
15991
0
        }
15992
310k
        D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param ','"));
15993
310k
        Token * _literal;
15994
310k
        arg_ty a;
15995
310k
        if (
15996
310k
            (a = lambda_param_rule(p))  // lambda_param
15997
310k
            &&
15998
310k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
15999
310k
        )
16000
136k
        {
16001
136k
            D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param ','"));
16002
136k
            _res = a;
16003
136k
            if (_res == NULL && PyErr_Occurred()) {
16004
0
                p->error_indicator = 1;
16005
0
                p->level--;
16006
0
                return NULL;
16007
0
            }
16008
136k
            goto done;
16009
136k
        }
16010
173k
        p->mark = _mark;
16011
173k
        D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
16012
173k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param ','"));
16013
173k
    }
16014
0
    { // lambda_param &':'
16015
173k
        if (p->error_indicator) {
16016
22
            p->level--;
16017
22
            return NULL;
16018
22
        }
16019
173k
        D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param &':'"));
16020
173k
        arg_ty a;
16021
173k
        if (
16022
173k
            (a = lambda_param_rule(p))  // lambda_param
16023
173k
            &&
16024
173k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
16025
173k
        )
16026
11.6k
        {
16027
11.6k
            D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param &':'"));
16028
11.6k
            _res = a;
16029
11.6k
            if (_res == NULL && PyErr_Occurred()) {
16030
0
                p->error_indicator = 1;
16031
0
                p->level--;
16032
0
                return NULL;
16033
0
            }
16034
11.6k
            goto done;
16035
11.6k
        }
16036
162k
        p->mark = _mark;
16037
162k
        D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
16038
162k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param &':'"));
16039
162k
    }
16040
0
    _res = NULL;
16041
310k
  done:
16042
310k
    p->level--;
16043
310k
    return _res;
16044
162k
}
16045
16046
// lambda_param_with_default: lambda_param default ',' | lambda_param default &':'
16047
static NameDefaultPair*
16048
lambda_param_with_default_rule(Parser *p)
16049
108k
{
16050
108k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16051
0
        _Pypegen_stack_overflow(p);
16052
0
    }
16053
108k
    if (p->error_indicator) {
16054
0
        p->level--;
16055
0
        return NULL;
16056
0
    }
16057
108k
    NameDefaultPair* _res = NULL;
16058
108k
    int _mark = p->mark;
16059
108k
    { // lambda_param default ','
16060
108k
        if (p->error_indicator) {
16061
0
            p->level--;
16062
0
            return NULL;
16063
0
        }
16064
108k
        D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default ','"));
16065
108k
        Token * _literal;
16066
108k
        arg_ty a;
16067
108k
        expr_ty c;
16068
108k
        if (
16069
108k
            (a = lambda_param_rule(p))  // lambda_param
16070
108k
            &&
16071
108k
            (c = default_rule(p))  // default
16072
108k
            &&
16073
108k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
16074
108k
        )
16075
19.6k
        {
16076
19.6k
            D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default ','"));
16077
19.6k
            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
16078
19.6k
            if (_res == NULL && PyErr_Occurred()) {
16079
0
                p->error_indicator = 1;
16080
0
                p->level--;
16081
0
                return NULL;
16082
0
            }
16083
19.6k
            goto done;
16084
19.6k
        }
16085
88.5k
        p->mark = _mark;
16086
88.5k
        D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
16087
88.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default ','"));
16088
88.5k
    }
16089
0
    { // lambda_param default &':'
16090
88.5k
        if (p->error_indicator) {
16091
752
            p->level--;
16092
752
            return NULL;
16093
752
        }
16094
87.7k
        D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'"));
16095
87.7k
        arg_ty a;
16096
87.7k
        expr_ty c;
16097
87.7k
        if (
16098
87.7k
            (a = lambda_param_rule(p))  // lambda_param
16099
87.7k
            &&
16100
87.7k
            (c = default_rule(p))  // default
16101
87.7k
            &&
16102
87.7k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
16103
87.7k
        )
16104
7.72k
        {
16105
7.72k
            D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'"));
16106
7.72k
            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
16107
7.72k
            if (_res == NULL && PyErr_Occurred()) {
16108
0
                p->error_indicator = 1;
16109
0
                p->level--;
16110
0
                return NULL;
16111
0
            }
16112
7.72k
            goto done;
16113
7.72k
        }
16114
80.0k
        p->mark = _mark;
16115
80.0k
        D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
16116
80.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default &':'"));
16117
80.0k
    }
16118
0
    _res = NULL;
16119
107k
  done:
16120
107k
    p->level--;
16121
107k
    return _res;
16122
80.0k
}
16123
16124
// lambda_param_maybe_default: lambda_param default? ',' | lambda_param default? &':'
16125
static NameDefaultPair*
16126
lambda_param_maybe_default_rule(Parser *p)
16127
44.6k
{
16128
44.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16129
0
        _Pypegen_stack_overflow(p);
16130
0
    }
16131
44.6k
    if (p->error_indicator) {
16132
0
        p->level--;
16133
0
        return NULL;
16134
0
    }
16135
44.6k
    NameDefaultPair* _res = NULL;
16136
44.6k
    int _mark = p->mark;
16137
44.6k
    { // lambda_param default? ','
16138
44.6k
        if (p->error_indicator) {
16139
0
            p->level--;
16140
0
            return NULL;
16141
0
        }
16142
44.6k
        D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','"));
16143
44.6k
        Token * _literal;
16144
44.6k
        arg_ty a;
16145
44.6k
        void *c;
16146
44.6k
        if (
16147
44.6k
            (a = lambda_param_rule(p))  // lambda_param
16148
44.6k
            &&
16149
44.6k
            (c = default_rule(p), !p->error_indicator)  // default?
16150
44.6k
            &&
16151
44.6k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
16152
44.6k
        )
16153
18.9k
        {
16154
18.9k
            D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','"));
16155
18.9k
            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
16156
18.9k
            if (_res == NULL && PyErr_Occurred()) {
16157
0
                p->error_indicator = 1;
16158
0
                p->level--;
16159
0
                return NULL;
16160
0
            }
16161
18.9k
            goto done;
16162
18.9k
        }
16163
25.6k
        p->mark = _mark;
16164
25.6k
        D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
16165
25.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? ','"));
16166
25.6k
    }
16167
0
    { // lambda_param default? &':'
16168
25.6k
        if (p->error_indicator) {
16169
801
            p->level--;
16170
801
            return NULL;
16171
801
        }
16172
24.8k
        D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'"));
16173
24.8k
        arg_ty a;
16174
24.8k
        void *c;
16175
24.8k
        if (
16176
24.8k
            (a = lambda_param_rule(p))  // lambda_param
16177
24.8k
            &&
16178
24.8k
            (c = default_rule(p), !p->error_indicator)  // default?
16179
24.8k
            &&
16180
24.8k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
16181
24.8k
        )
16182
2.59k
        {
16183
2.59k
            D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'"));
16184
2.59k
            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
16185
2.59k
            if (_res == NULL && PyErr_Occurred()) {
16186
0
                p->error_indicator = 1;
16187
0
                p->level--;
16188
0
                return NULL;
16189
0
            }
16190
2.59k
            goto done;
16191
2.59k
        }
16192
22.2k
        p->mark = _mark;
16193
22.2k
        D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
16194
22.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? &':'"));
16195
22.2k
    }
16196
0
    _res = NULL;
16197
43.8k
  done:
16198
43.8k
    p->level--;
16199
43.8k
    return _res;
16200
22.2k
}
16201
16202
// lambda_param: NAME
16203
static arg_ty
16204
lambda_param_rule(Parser *p)
16205
759k
{
16206
759k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16207
0
        _Pypegen_stack_overflow(p);
16208
0
    }
16209
759k
    if (p->error_indicator) {
16210
0
        p->level--;
16211
0
        return NULL;
16212
0
    }
16213
759k
    arg_ty _res = NULL;
16214
759k
    int _mark = p->mark;
16215
759k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
16216
55
        p->error_indicator = 1;
16217
55
        p->level--;
16218
55
        return NULL;
16219
55
    }
16220
759k
    int _start_lineno = p->tokens[_mark]->lineno;
16221
759k
    UNUSED(_start_lineno); // Only used by EXTRA macro
16222
759k
    int _start_col_offset = p->tokens[_mark]->col_offset;
16223
759k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
16224
759k
    { // NAME
16225
759k
        if (p->error_indicator) {
16226
0
            p->level--;
16227
0
            return NULL;
16228
0
        }
16229
759k
        D(fprintf(stderr, "%*c> lambda_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
16230
759k
        expr_ty a;
16231
759k
        if (
16232
759k
            (a = _PyPegen_name_token(p))  // NAME
16233
759k
        )
16234
382k
        {
16235
382k
            D(fprintf(stderr, "%*c+ lambda_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
16236
382k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16237
382k
            if (_token == NULL) {
16238
0
                p->level--;
16239
0
                return NULL;
16240
0
            }
16241
382k
            int _end_lineno = _token->end_lineno;
16242
382k
            UNUSED(_end_lineno); // Only used by EXTRA macro
16243
382k
            int _end_col_offset = _token->end_col_offset;
16244
382k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
16245
382k
            _res = _PyAST_arg ( a -> v . Name . id , NULL , NULL , EXTRA );
16246
382k
            if (_res == NULL && PyErr_Occurred()) {
16247
0
                p->error_indicator = 1;
16248
0
                p->level--;
16249
0
                return NULL;
16250
0
            }
16251
382k
            goto done;
16252
382k
        }
16253
377k
        p->mark = _mark;
16254
377k
        D(fprintf(stderr, "%*c%s lambda_param[%d-%d]: %s failed!\n", p->level, ' ',
16255
377k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
16256
377k
    }
16257
0
    _res = NULL;
16258
759k
  done:
16259
759k
    p->level--;
16260
759k
    return _res;
16261
377k
}
16262
16263
// fstring_middle: fstring_replacement_field | FSTRING_MIDDLE
16264
static expr_ty
16265
fstring_middle_rule(Parser *p)
16266
50.4k
{
16267
50.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16268
1
        _Pypegen_stack_overflow(p);
16269
1
    }
16270
50.4k
    if (p->error_indicator) {
16271
1
        p->level--;
16272
1
        return NULL;
16273
1
    }
16274
50.4k
    expr_ty _res = NULL;
16275
50.4k
    int _mark = p->mark;
16276
50.4k
    { // fstring_replacement_field
16277
50.4k
        if (p->error_indicator) {
16278
0
            p->level--;
16279
0
            return NULL;
16280
0
        }
16281
50.4k
        D(fprintf(stderr, "%*c> fstring_middle[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field"));
16282
50.4k
        expr_ty fstring_replacement_field_var;
16283
50.4k
        if (
16284
50.4k
            (fstring_replacement_field_var = fstring_replacement_field_rule(p))  // fstring_replacement_field
16285
50.4k
        )
16286
13.5k
        {
16287
13.5k
            D(fprintf(stderr, "%*c+ fstring_middle[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field"));
16288
13.5k
            _res = fstring_replacement_field_var;
16289
13.5k
            goto done;
16290
13.5k
        }
16291
36.8k
        p->mark = _mark;
16292
36.8k
        D(fprintf(stderr, "%*c%s fstring_middle[%d-%d]: %s failed!\n", p->level, ' ',
16293
36.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_replacement_field"));
16294
36.8k
    }
16295
0
    { // FSTRING_MIDDLE
16296
36.8k
        if (p->error_indicator) {
16297
1.90k
            p->level--;
16298
1.90k
            return NULL;
16299
1.90k
        }
16300
34.9k
        D(fprintf(stderr, "%*c> fstring_middle[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE"));
16301
34.9k
        Token * t;
16302
34.9k
        if (
16303
34.9k
            (t = _PyPegen_expect_token(p, FSTRING_MIDDLE))  // token='FSTRING_MIDDLE'
16304
34.9k
        )
16305
21.3k
        {
16306
21.3k
            D(fprintf(stderr, "%*c+ fstring_middle[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE"));
16307
21.3k
            _res = _PyPegen_constant_from_token ( p , t );
16308
21.3k
            if (_res == NULL && PyErr_Occurred()) {
16309
4
                p->error_indicator = 1;
16310
4
                p->level--;
16311
4
                return NULL;
16312
4
            }
16313
21.3k
            goto done;
16314
21.3k
        }
16315
13.5k
        p->mark = _mark;
16316
13.5k
        D(fprintf(stderr, "%*c%s fstring_middle[%d-%d]: %s failed!\n", p->level, ' ',
16317
13.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_MIDDLE"));
16318
13.5k
    }
16319
0
    _res = NULL;
16320
48.4k
  done:
16321
48.4k
    p->level--;
16322
48.4k
    return _res;
16323
13.5k
}
16324
16325
// fstring_replacement_field:
16326
//     | '{' annotated_rhs '='? fstring_conversion? fstring_full_format_spec? '}'
16327
//     | invalid_fstring_replacement_field
16328
static expr_ty
16329
fstring_replacement_field_rule(Parser *p)
16330
57.0k
{
16331
57.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16332
1
        _Pypegen_stack_overflow(p);
16333
1
    }
16334
57.0k
    if (p->error_indicator) {
16335
1
        p->level--;
16336
1
        return NULL;
16337
1
    }
16338
57.0k
    expr_ty _res = NULL;
16339
57.0k
    int _mark = p->mark;
16340
57.0k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
16341
131
        p->error_indicator = 1;
16342
131
        p->level--;
16343
131
        return NULL;
16344
131
    }
16345
56.9k
    int _start_lineno = p->tokens[_mark]->lineno;
16346
56.9k
    UNUSED(_start_lineno); // Only used by EXTRA macro
16347
56.9k
    int _start_col_offset = p->tokens[_mark]->col_offset;
16348
56.9k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
16349
56.9k
    { // '{' annotated_rhs '='? fstring_conversion? fstring_full_format_spec? '}'
16350
56.9k
        if (p->error_indicator) {
16351
0
            p->level--;
16352
0
            return NULL;
16353
0
        }
16354
56.9k
        D(fprintf(stderr, "%*c> fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? fstring_full_format_spec? '}'"));
16355
56.9k
        Token * _literal;
16356
56.9k
        expr_ty a;
16357
56.9k
        void *conversion;
16358
56.9k
        void *debug_expr;
16359
56.9k
        void *format;
16360
56.9k
        Token * rbrace;
16361
56.9k
        if (
16362
56.9k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
16363
56.9k
            &&
16364
56.9k
            (a = annotated_rhs_rule(p))  // annotated_rhs
16365
56.9k
            &&
16366
56.9k
            (debug_expr = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
16367
56.9k
            &&
16368
56.9k
            (conversion = fstring_conversion_rule(p), !p->error_indicator)  // fstring_conversion?
16369
56.9k
            &&
16370
56.9k
            (format = fstring_full_format_spec_rule(p), !p->error_indicator)  // fstring_full_format_spec?
16371
56.9k
            &&
16372
56.9k
            (rbrace = _PyPegen_expect_token(p, 26))  // token='}'
16373
56.9k
        )
16374
16.8k
        {
16375
16.8k
            D(fprintf(stderr, "%*c+ fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? fstring_full_format_spec? '}'"));
16376
16.8k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16377
16.8k
            if (_token == NULL) {
16378
0
                p->level--;
16379
0
                return NULL;
16380
0
            }
16381
16.8k
            int _end_lineno = _token->end_lineno;
16382
16.8k
            UNUSED(_end_lineno); // Only used by EXTRA macro
16383
16.8k
            int _end_col_offset = _token->end_col_offset;
16384
16.8k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
16385
16.8k
            _res = _PyPegen_formatted_value ( p , a , debug_expr , conversion , format , rbrace , EXTRA );
16386
16.8k
            if (_res == NULL && PyErr_Occurred()) {
16387
1
                p->error_indicator = 1;
16388
1
                p->level--;
16389
1
                return NULL;
16390
1
            }
16391
16.8k
            goto done;
16392
16.8k
        }
16393
40.0k
        p->mark = _mark;
16394
40.0k
        D(fprintf(stderr, "%*c%s fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16395
40.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? fstring_full_format_spec? '}'"));
16396
40.0k
    }
16397
40.0k
    if (p->call_invalid_rules) { // invalid_fstring_replacement_field
16398
8.15k
        if (p->error_indicator) {
16399
1.25k
            p->level--;
16400
1.25k
            return NULL;
16401
1.25k
        }
16402
6.89k
        D(fprintf(stderr, "%*c> fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_fstring_replacement_field"));
16403
6.89k
        void *invalid_fstring_replacement_field_var;
16404
6.89k
        if (
16405
6.89k
            (invalid_fstring_replacement_field_var = invalid_fstring_replacement_field_rule(p))  // invalid_fstring_replacement_field
16406
6.89k
        )
16407
0
        {
16408
0
            D(fprintf(stderr, "%*c+ fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_fstring_replacement_field"));
16409
0
            _res = invalid_fstring_replacement_field_var;
16410
0
            goto done;
16411
0
        }
16412
6.89k
        p->mark = _mark;
16413
6.89k
        D(fprintf(stderr, "%*c%s fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16414
6.89k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_fstring_replacement_field"));
16415
6.89k
    }
16416
38.7k
    _res = NULL;
16417
55.6k
  done:
16418
55.6k
    p->level--;
16419
55.6k
    return _res;
16420
38.7k
}
16421
16422
// fstring_conversion: "!" NAME
16423
static ResultTokenWithMetadata*
16424
fstring_conversion_rule(Parser *p)
16425
23.9k
{
16426
23.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16427
0
        _Pypegen_stack_overflow(p);
16428
0
    }
16429
23.9k
    if (p->error_indicator) {
16430
0
        p->level--;
16431
0
        return NULL;
16432
0
    }
16433
23.9k
    ResultTokenWithMetadata* _res = NULL;
16434
23.9k
    int _mark = p->mark;
16435
23.9k
    { // "!" NAME
16436
23.9k
        if (p->error_indicator) {
16437
0
            p->level--;
16438
0
            return NULL;
16439
0
        }
16440
23.9k
        D(fprintf(stderr, "%*c> fstring_conversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"!\" NAME"));
16441
23.9k
        expr_ty conv;
16442
23.9k
        Token * conv_token;
16443
23.9k
        if (
16444
23.9k
            (conv_token = _PyPegen_expect_token(p, 54))  // token='!'
16445
23.9k
            &&
16446
23.9k
            (conv = _PyPegen_name_token(p))  // NAME
16447
23.9k
        )
16448
744
        {
16449
744
            D(fprintf(stderr, "%*c+ fstring_conversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"!\" NAME"));
16450
744
            _res = _PyPegen_check_fstring_conversion ( p , conv_token , conv );
16451
744
            if (_res == NULL && PyErr_Occurred()) {
16452
15
                p->error_indicator = 1;
16453
15
                p->level--;
16454
15
                return NULL;
16455
15
            }
16456
729
            goto done;
16457
744
        }
16458
23.2k
        p->mark = _mark;
16459
23.2k
        D(fprintf(stderr, "%*c%s fstring_conversion[%d-%d]: %s failed!\n", p->level, ' ',
16460
23.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"!\" NAME"));
16461
23.2k
    }
16462
0
    _res = NULL;
16463
23.9k
  done:
16464
23.9k
    p->level--;
16465
23.9k
    return _res;
16466
23.2k
}
16467
16468
// fstring_full_format_spec: ':' fstring_format_spec*
16469
static ResultTokenWithMetadata*
16470
fstring_full_format_spec_rule(Parser *p)
16471
18.6k
{
16472
18.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16473
0
        _Pypegen_stack_overflow(p);
16474
0
    }
16475
18.6k
    if (p->error_indicator) {
16476
0
        p->level--;
16477
0
        return NULL;
16478
0
    }
16479
18.6k
    ResultTokenWithMetadata* _res = NULL;
16480
18.6k
    int _mark = p->mark;
16481
18.6k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
16482
2
        p->error_indicator = 1;
16483
2
        p->level--;
16484
2
        return NULL;
16485
2
    }
16486
18.6k
    int _start_lineno = p->tokens[_mark]->lineno;
16487
18.6k
    UNUSED(_start_lineno); // Only used by EXTRA macro
16488
18.6k
    int _start_col_offset = p->tokens[_mark]->col_offset;
16489
18.6k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
16490
18.6k
    { // ':' fstring_format_spec*
16491
18.6k
        if (p->error_indicator) {
16492
0
            p->level--;
16493
0
            return NULL;
16494
0
        }
16495
18.6k
        D(fprintf(stderr, "%*c> fstring_full_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' fstring_format_spec*"));
16496
18.6k
        Token * colon;
16497
18.6k
        asdl_seq * spec;
16498
18.6k
        if (
16499
18.6k
            (colon = _PyPegen_expect_token(p, 11))  // token=':'
16500
18.6k
            &&
16501
18.6k
            (spec = _loop0_76_rule(p))  // fstring_format_spec*
16502
18.6k
        )
16503
3.18k
        {
16504
3.18k
            D(fprintf(stderr, "%*c+ fstring_full_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' fstring_format_spec*"));
16505
3.18k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16506
3.18k
            if (_token == NULL) {
16507
0
                p->level--;
16508
0
                return NULL;
16509
0
            }
16510
3.18k
            int _end_lineno = _token->end_lineno;
16511
3.18k
            UNUSED(_end_lineno); // Only used by EXTRA macro
16512
3.18k
            int _end_col_offset = _token->end_col_offset;
16513
3.18k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
16514
3.18k
            _res = _PyPegen_setup_full_format_spec ( p , colon , ( asdl_expr_seq* ) spec , EXTRA );
16515
3.18k
            if (_res == NULL && PyErr_Occurred()) {
16516
0
                p->error_indicator = 1;
16517
0
                p->level--;
16518
0
                return NULL;
16519
0
            }
16520
3.18k
            goto done;
16521
3.18k
        }
16522
15.4k
        p->mark = _mark;
16523
15.4k
        D(fprintf(stderr, "%*c%s fstring_full_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16524
15.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' fstring_format_spec*"));
16525
15.4k
    }
16526
0
    _res = NULL;
16527
18.6k
  done:
16528
18.6k
    p->level--;
16529
18.6k
    return _res;
16530
15.4k
}
16531
16532
// fstring_format_spec: FSTRING_MIDDLE | fstring_replacement_field
16533
static expr_ty
16534
fstring_format_spec_rule(Parser *p)
16535
12.1k
{
16536
12.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16537
0
        _Pypegen_stack_overflow(p);
16538
0
    }
16539
12.1k
    if (p->error_indicator) {
16540
0
        p->level--;
16541
0
        return NULL;
16542
0
    }
16543
12.1k
    expr_ty _res = NULL;
16544
12.1k
    int _mark = p->mark;
16545
12.1k
    { // FSTRING_MIDDLE
16546
12.1k
        if (p->error_indicator) {
16547
0
            p->level--;
16548
0
            return NULL;
16549
0
        }
16550
12.1k
        D(fprintf(stderr, "%*c> fstring_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE"));
16551
12.1k
        Token * t;
16552
12.1k
        if (
16553
12.1k
            (t = _PyPegen_expect_token(p, FSTRING_MIDDLE))  // token='FSTRING_MIDDLE'
16554
12.1k
        )
16555
5.52k
        {
16556
5.52k
            D(fprintf(stderr, "%*c+ fstring_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE"));
16557
5.52k
            _res = _PyPegen_decoded_constant_from_token ( p , t );
16558
5.52k
            if (_res == NULL && PyErr_Occurred()) {
16559
1
                p->error_indicator = 1;
16560
1
                p->level--;
16561
1
                return NULL;
16562
1
            }
16563
5.52k
            goto done;
16564
5.52k
        }
16565
6.63k
        p->mark = _mark;
16566
6.63k
        D(fprintf(stderr, "%*c%s fstring_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16567
6.63k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_MIDDLE"));
16568
6.63k
    }
16569
0
    { // fstring_replacement_field
16570
6.63k
        if (p->error_indicator) {
16571
8
            p->level--;
16572
8
            return NULL;
16573
8
        }
16574
6.62k
        D(fprintf(stderr, "%*c> fstring_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field"));
16575
6.62k
        expr_ty fstring_replacement_field_var;
16576
6.62k
        if (
16577
6.62k
            (fstring_replacement_field_var = fstring_replacement_field_rule(p))  // fstring_replacement_field
16578
6.62k
        )
16579
3.29k
        {
16580
3.29k
            D(fprintf(stderr, "%*c+ fstring_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field"));
16581
3.29k
            _res = fstring_replacement_field_var;
16582
3.29k
            goto done;
16583
3.29k
        }
16584
3.33k
        p->mark = _mark;
16585
3.33k
        D(fprintf(stderr, "%*c%s fstring_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16586
3.33k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_replacement_field"));
16587
3.33k
    }
16588
0
    _res = NULL;
16589
12.1k
  done:
16590
12.1k
    p->level--;
16591
12.1k
    return _res;
16592
3.33k
}
16593
16594
// fstring: FSTRING_START fstring_middle* FSTRING_END
16595
static expr_ty
16596
fstring_rule(Parser *p)
16597
176k
{
16598
176k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16599
1
        _Pypegen_stack_overflow(p);
16600
1
    }
16601
176k
    if (p->error_indicator) {
16602
1
        p->level--;
16603
1
        return NULL;
16604
1
    }
16605
176k
    expr_ty _res = NULL;
16606
176k
    int _mark = p->mark;
16607
176k
    { // FSTRING_START fstring_middle* FSTRING_END
16608
176k
        if (p->error_indicator) {
16609
0
            p->level--;
16610
0
            return NULL;
16611
0
        }
16612
176k
        D(fprintf(stderr, "%*c> fstring[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END"));
16613
176k
        Token * a;
16614
176k
        asdl_seq * b;
16615
176k
        Token * c;
16616
176k
        if (
16617
176k
            (a = _PyPegen_expect_token(p, FSTRING_START))  // token='FSTRING_START'
16618
176k
            &&
16619
176k
            (b = _loop0_77_rule(p))  // fstring_middle*
16620
176k
            &&
16621
176k
            (c = _PyPegen_expect_token(p, FSTRING_END))  // token='FSTRING_END'
16622
176k
        )
16623
12.0k
        {
16624
12.0k
            D(fprintf(stderr, "%*c+ fstring[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END"));
16625
12.0k
            _res = _PyPegen_joined_str ( p , a , ( asdl_expr_seq* ) b , c );
16626
12.0k
            if (_res == NULL && PyErr_Occurred()) {
16627
0
                p->error_indicator = 1;
16628
0
                p->level--;
16629
0
                return NULL;
16630
0
            }
16631
12.0k
            goto done;
16632
12.0k
        }
16633
164k
        p->mark = _mark;
16634
164k
        D(fprintf(stderr, "%*c%s fstring[%d-%d]: %s failed!\n", p->level, ' ',
16635
164k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END"));
16636
164k
    }
16637
0
    _res = NULL;
16638
176k
  done:
16639
176k
    p->level--;
16640
176k
    return _res;
16641
164k
}
16642
16643
// tstring_format_spec_replacement_field:
16644
//     | '{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'
16645
//     | invalid_tstring_replacement_field
16646
static expr_ty
16647
tstring_format_spec_replacement_field_rule(Parser *p)
16648
4.11k
{
16649
4.11k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16650
0
        _Pypegen_stack_overflow(p);
16651
0
    }
16652
4.11k
    if (p->error_indicator) {
16653
0
        p->level--;
16654
0
        return NULL;
16655
0
    }
16656
4.11k
    expr_ty _res = NULL;
16657
4.11k
    int _mark = p->mark;
16658
4.11k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
16659
0
        p->error_indicator = 1;
16660
0
        p->level--;
16661
0
        return NULL;
16662
0
    }
16663
4.11k
    int _start_lineno = p->tokens[_mark]->lineno;
16664
4.11k
    UNUSED(_start_lineno); // Only used by EXTRA macro
16665
4.11k
    int _start_col_offset = p->tokens[_mark]->col_offset;
16666
4.11k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
16667
4.11k
    { // '{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'
16668
4.11k
        if (p->error_indicator) {
16669
0
            p->level--;
16670
0
            return NULL;
16671
0
        }
16672
4.11k
        D(fprintf(stderr, "%*c> tstring_format_spec_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16673
4.11k
        Token * _literal;
16674
4.11k
        expr_ty a;
16675
4.11k
        void *conversion;
16676
4.11k
        void *debug_expr;
16677
4.11k
        void *format;
16678
4.11k
        Token * rbrace;
16679
4.11k
        if (
16680
4.11k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
16681
4.11k
            &&
16682
4.11k
            (a = annotated_rhs_rule(p))  // annotated_rhs
16683
4.11k
            &&
16684
4.11k
            (debug_expr = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
16685
4.11k
            &&
16686
4.11k
            (conversion = fstring_conversion_rule(p), !p->error_indicator)  // fstring_conversion?
16687
4.11k
            &&
16688
4.11k
            (format = tstring_full_format_spec_rule(p), !p->error_indicator)  // tstring_full_format_spec?
16689
4.11k
            &&
16690
4.11k
            (rbrace = _PyPegen_expect_token(p, 26))  // token='}'
16691
4.11k
        )
16692
1.36k
        {
16693
1.36k
            D(fprintf(stderr, "%*c+ tstring_format_spec_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16694
1.36k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16695
1.36k
            if (_token == NULL) {
16696
0
                p->level--;
16697
0
                return NULL;
16698
0
            }
16699
1.36k
            int _end_lineno = _token->end_lineno;
16700
1.36k
            UNUSED(_end_lineno); // Only used by EXTRA macro
16701
1.36k
            int _end_col_offset = _token->end_col_offset;
16702
1.36k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
16703
1.36k
            _res = _PyPegen_formatted_value ( p , a , debug_expr , conversion , format , rbrace , EXTRA );
16704
1.36k
            if (_res == NULL && PyErr_Occurred()) {
16705
1
                p->error_indicator = 1;
16706
1
                p->level--;
16707
1
                return NULL;
16708
1
            }
16709
1.36k
            goto done;
16710
1.36k
        }
16711
2.75k
        p->mark = _mark;
16712
2.75k
        D(fprintf(stderr, "%*c%s tstring_format_spec_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16713
2.75k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16714
2.75k
    }
16715
2.75k
    if (p->call_invalid_rules) { // invalid_tstring_replacement_field
16716
1.08k
        if (p->error_indicator) {
16717
328
            p->level--;
16718
328
            return NULL;
16719
328
        }
16720
761
        D(fprintf(stderr, "%*c> tstring_format_spec_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_tstring_replacement_field"));
16721
761
        void *invalid_tstring_replacement_field_var;
16722
761
        if (
16723
761
            (invalid_tstring_replacement_field_var = invalid_tstring_replacement_field_rule(p))  // invalid_tstring_replacement_field
16724
761
        )
16725
0
        {
16726
0
            D(fprintf(stderr, "%*c+ tstring_format_spec_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_tstring_replacement_field"));
16727
0
            _res = invalid_tstring_replacement_field_var;
16728
0
            goto done;
16729
0
        }
16730
761
        p->mark = _mark;
16731
761
        D(fprintf(stderr, "%*c%s tstring_format_spec_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16732
761
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_tstring_replacement_field"));
16733
761
    }
16734
2.42k
    _res = NULL;
16735
3.78k
  done:
16736
3.78k
    p->level--;
16737
3.78k
    return _res;
16738
2.42k
}
16739
16740
// tstring_format_spec: TSTRING_MIDDLE | tstring_format_spec_replacement_field
16741
static expr_ty
16742
tstring_format_spec_rule(Parser *p)
16743
7.23k
{
16744
7.23k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16745
0
        _Pypegen_stack_overflow(p);
16746
0
    }
16747
7.23k
    if (p->error_indicator) {
16748
0
        p->level--;
16749
0
        return NULL;
16750
0
    }
16751
7.23k
    expr_ty _res = NULL;
16752
7.23k
    int _mark = p->mark;
16753
7.23k
    { // TSTRING_MIDDLE
16754
7.23k
        if (p->error_indicator) {
16755
0
            p->level--;
16756
0
            return NULL;
16757
0
        }
16758
7.23k
        D(fprintf(stderr, "%*c> tstring_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_MIDDLE"));
16759
7.23k
        Token * t;
16760
7.23k
        if (
16761
7.23k
            (t = _PyPegen_expect_token(p, TSTRING_MIDDLE))  // token='TSTRING_MIDDLE'
16762
7.23k
        )
16763
3.11k
        {
16764
3.11k
            D(fprintf(stderr, "%*c+ tstring_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_MIDDLE"));
16765
3.11k
            _res = _PyPegen_decoded_constant_from_token ( p , t );
16766
3.11k
            if (_res == NULL && PyErr_Occurred()) {
16767
1
                p->error_indicator = 1;
16768
1
                p->level--;
16769
1
                return NULL;
16770
1
            }
16771
3.10k
            goto done;
16772
3.11k
        }
16773
4.12k
        p->mark = _mark;
16774
4.12k
        D(fprintf(stderr, "%*c%s tstring_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16775
4.12k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TSTRING_MIDDLE"));
16776
4.12k
    }
16777
0
    { // tstring_format_spec_replacement_field
16778
4.12k
        if (p->error_indicator) {
16779
5
            p->level--;
16780
5
            return NULL;
16781
5
        }
16782
4.11k
        D(fprintf(stderr, "%*c> tstring_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_format_spec_replacement_field"));
16783
4.11k
        expr_ty tstring_format_spec_replacement_field_var;
16784
4.11k
        if (
16785
4.11k
            (tstring_format_spec_replacement_field_var = tstring_format_spec_replacement_field_rule(p))  // tstring_format_spec_replacement_field
16786
4.11k
        )
16787
1.36k
        {
16788
1.36k
            D(fprintf(stderr, "%*c+ tstring_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tstring_format_spec_replacement_field"));
16789
1.36k
            _res = tstring_format_spec_replacement_field_var;
16790
1.36k
            goto done;
16791
1.36k
        }
16792
2.75k
        p->mark = _mark;
16793
2.75k
        D(fprintf(stderr, "%*c%s tstring_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16794
2.75k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_format_spec_replacement_field"));
16795
2.75k
    }
16796
0
    _res = NULL;
16797
7.22k
  done:
16798
7.22k
    p->level--;
16799
7.22k
    return _res;
16800
2.75k
}
16801
16802
// tstring_full_format_spec: ':' tstring_format_spec*
16803
static ResultTokenWithMetadata*
16804
tstring_full_format_spec_rule(Parser *p)
16805
5.30k
{
16806
5.30k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16807
0
        _Pypegen_stack_overflow(p);
16808
0
    }
16809
5.30k
    if (p->error_indicator) {
16810
0
        p->level--;
16811
0
        return NULL;
16812
0
    }
16813
5.30k
    ResultTokenWithMetadata* _res = NULL;
16814
5.30k
    int _mark = p->mark;
16815
5.30k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
16816
1
        p->error_indicator = 1;
16817
1
        p->level--;
16818
1
        return NULL;
16819
1
    }
16820
5.30k
    int _start_lineno = p->tokens[_mark]->lineno;
16821
5.30k
    UNUSED(_start_lineno); // Only used by EXTRA macro
16822
5.30k
    int _start_col_offset = p->tokens[_mark]->col_offset;
16823
5.30k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
16824
5.30k
    { // ':' tstring_format_spec*
16825
5.30k
        if (p->error_indicator) {
16826
0
            p->level--;
16827
0
            return NULL;
16828
0
        }
16829
5.30k
        D(fprintf(stderr, "%*c> tstring_full_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' tstring_format_spec*"));
16830
5.30k
        Token * colon;
16831
5.30k
        asdl_seq * spec;
16832
5.30k
        if (
16833
5.30k
            (colon = _PyPegen_expect_token(p, 11))  // token=':'
16834
5.30k
            &&
16835
5.30k
            (spec = _loop0_78_rule(p))  // tstring_format_spec*
16836
5.30k
        )
16837
2.76k
        {
16838
2.76k
            D(fprintf(stderr, "%*c+ tstring_full_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' tstring_format_spec*"));
16839
2.76k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16840
2.76k
            if (_token == NULL) {
16841
0
                p->level--;
16842
0
                return NULL;
16843
0
            }
16844
2.76k
            int _end_lineno = _token->end_lineno;
16845
2.76k
            UNUSED(_end_lineno); // Only used by EXTRA macro
16846
2.76k
            int _end_col_offset = _token->end_col_offset;
16847
2.76k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
16848
2.76k
            _res = _PyPegen_setup_full_format_spec ( p , colon , ( asdl_expr_seq* ) spec , EXTRA );
16849
2.76k
            if (_res == NULL && PyErr_Occurred()) {
16850
0
                p->error_indicator = 1;
16851
0
                p->level--;
16852
0
                return NULL;
16853
0
            }
16854
2.76k
            goto done;
16855
2.76k
        }
16856
2.54k
        p->mark = _mark;
16857
2.54k
        D(fprintf(stderr, "%*c%s tstring_full_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16858
2.54k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' tstring_format_spec*"));
16859
2.54k
    }
16860
0
    _res = NULL;
16861
5.30k
  done:
16862
5.30k
    p->level--;
16863
5.30k
    return _res;
16864
2.54k
}
16865
16866
// tstring_replacement_field:
16867
//     | '{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'
16868
//     | invalid_tstring_replacement_field
16869
static expr_ty
16870
tstring_replacement_field_rule(Parser *p)
16871
11.7k
{
16872
11.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16873
1
        _Pypegen_stack_overflow(p);
16874
1
    }
16875
11.7k
    if (p->error_indicator) {
16876
1
        p->level--;
16877
1
        return NULL;
16878
1
    }
16879
11.7k
    expr_ty _res = NULL;
16880
11.7k
    int _mark = p->mark;
16881
11.7k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
16882
79
        p->error_indicator = 1;
16883
79
        p->level--;
16884
79
        return NULL;
16885
79
    }
16886
11.7k
    int _start_lineno = p->tokens[_mark]->lineno;
16887
11.7k
    UNUSED(_start_lineno); // Only used by EXTRA macro
16888
11.7k
    int _start_col_offset = p->tokens[_mark]->col_offset;
16889
11.7k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
16890
11.7k
    { // '{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'
16891
11.7k
        if (p->error_indicator) {
16892
0
            p->level--;
16893
0
            return NULL;
16894
0
        }
16895
11.7k
        D(fprintf(stderr, "%*c> tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16896
11.7k
        Token * _literal;
16897
11.7k
        expr_ty a;
16898
11.7k
        void *conversion;
16899
11.7k
        void *debug_expr;
16900
11.7k
        void *format;
16901
11.7k
        Token * rbrace;
16902
11.7k
        if (
16903
11.7k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
16904
11.7k
            &&
16905
11.7k
            (a = annotated_rhs_rule(p))  // annotated_rhs
16906
11.7k
            &&
16907
11.7k
            (debug_expr = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
16908
11.7k
            &&
16909
11.7k
            (conversion = fstring_conversion_rule(p), !p->error_indicator)  // fstring_conversion?
16910
11.7k
            &&
16911
11.7k
            (format = tstring_full_format_spec_rule(p), !p->error_indicator)  // tstring_full_format_spec?
16912
11.7k
            &&
16913
11.7k
            (rbrace = _PyPegen_expect_token(p, 26))  // token='}'
16914
11.7k
        )
16915
2.65k
        {
16916
2.65k
            D(fprintf(stderr, "%*c+ tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16917
2.65k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16918
2.65k
            if (_token == NULL) {
16919
0
                p->level--;
16920
0
                return NULL;
16921
0
            }
16922
2.65k
            int _end_lineno = _token->end_lineno;
16923
2.65k
            UNUSED(_end_lineno); // Only used by EXTRA macro
16924
2.65k
            int _end_col_offset = _token->end_col_offset;
16925
2.65k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
16926
2.65k
            _res = _PyPegen_interpolation ( p , a , debug_expr , conversion , format , rbrace , EXTRA );
16927
2.65k
            if (_res == NULL && PyErr_Occurred()) {
16928
0
                p->error_indicator = 1;
16929
0
                p->level--;
16930
0
                return NULL;
16931
0
            }
16932
2.65k
            goto done;
16933
2.65k
        }
16934
9.06k
        p->mark = _mark;
16935
9.06k
        D(fprintf(stderr, "%*c%s tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16936
9.06k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16937
9.06k
    }
16938
9.06k
    if (p->call_invalid_rules) { // invalid_tstring_replacement_field
16939
3.31k
        if (p->error_indicator) {
16940
992
            p->level--;
16941
992
            return NULL;
16942
992
        }
16943
2.31k
        D(fprintf(stderr, "%*c> tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_tstring_replacement_field"));
16944
2.31k
        void *invalid_tstring_replacement_field_var;
16945
2.31k
        if (
16946
2.31k
            (invalid_tstring_replacement_field_var = invalid_tstring_replacement_field_rule(p))  // invalid_tstring_replacement_field
16947
2.31k
        )
16948
0
        {
16949
0
            D(fprintf(stderr, "%*c+ tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_tstring_replacement_field"));
16950
0
            _res = invalid_tstring_replacement_field_var;
16951
0
            goto done;
16952
0
        }
16953
2.31k
        p->mark = _mark;
16954
2.31k
        D(fprintf(stderr, "%*c%s tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16955
2.31k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_tstring_replacement_field"));
16956
2.31k
    }
16957
8.07k
    _res = NULL;
16958
10.7k
  done:
16959
10.7k
    p->level--;
16960
10.7k
    return _res;
16961
8.07k
}
16962
16963
// tstring_middle: tstring_replacement_field | TSTRING_MIDDLE
16964
static expr_ty
16965
tstring_middle_rule(Parser *p)
16966
11.7k
{
16967
11.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
16968
1
        _Pypegen_stack_overflow(p);
16969
1
    }
16970
11.7k
    if (p->error_indicator) {
16971
1
        p->level--;
16972
1
        return NULL;
16973
1
    }
16974
11.7k
    expr_ty _res = NULL;
16975
11.7k
    int _mark = p->mark;
16976
11.7k
    { // tstring_replacement_field
16977
11.7k
        if (p->error_indicator) {
16978
0
            p->level--;
16979
0
            return NULL;
16980
0
        }
16981
11.7k
        D(fprintf(stderr, "%*c> tstring_middle[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_replacement_field"));
16982
11.7k
        expr_ty tstring_replacement_field_var;
16983
11.7k
        if (
16984
11.7k
            (tstring_replacement_field_var = tstring_replacement_field_rule(p))  // tstring_replacement_field
16985
11.7k
        )
16986
2.65k
        {
16987
2.65k
            D(fprintf(stderr, "%*c+ tstring_middle[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tstring_replacement_field"));
16988
2.65k
            _res = tstring_replacement_field_var;
16989
2.65k
            goto done;
16990
2.65k
        }
16991
9.14k
        p->mark = _mark;
16992
9.14k
        D(fprintf(stderr, "%*c%s tstring_middle[%d-%d]: %s failed!\n", p->level, ' ',
16993
9.14k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_replacement_field"));
16994
9.14k
    }
16995
0
    { // TSTRING_MIDDLE
16996
9.14k
        if (p->error_indicator) {
16997
1.25k
            p->level--;
16998
1.25k
            return NULL;
16999
1.25k
        }
17000
7.89k
        D(fprintf(stderr, "%*c> tstring_middle[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_MIDDLE"));
17001
7.89k
        Token * t;
17002
7.89k
        if (
17003
7.89k
            (t = _PyPegen_expect_token(p, TSTRING_MIDDLE))  // token='TSTRING_MIDDLE'
17004
7.89k
        )
17005
4.68k
        {
17006
4.68k
            D(fprintf(stderr, "%*c+ tstring_middle[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_MIDDLE"));
17007
4.68k
            _res = _PyPegen_constant_from_token ( p , t );
17008
4.68k
            if (_res == NULL && PyErr_Occurred()) {
17009
5
                p->error_indicator = 1;
17010
5
                p->level--;
17011
5
                return NULL;
17012
5
            }
17013
4.68k
            goto done;
17014
4.68k
        }
17015
3.20k
        p->mark = _mark;
17016
3.20k
        D(fprintf(stderr, "%*c%s tstring_middle[%d-%d]: %s failed!\n", p->level, ' ',
17017
3.20k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TSTRING_MIDDLE"));
17018
3.20k
    }
17019
0
    _res = NULL;
17020
10.5k
  done:
17021
10.5k
    p->level--;
17022
10.5k
    return _res;
17023
3.20k
}
17024
17025
// tstring: TSTRING_START tstring_middle* TSTRING_END
17026
static expr_ty
17027
tstring_rule(Parser *p)
17028
98.9k
{
17029
98.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17030
0
        _Pypegen_stack_overflow(p);
17031
0
    }
17032
98.9k
    if (p->error_indicator) {
17033
0
        p->level--;
17034
0
        return NULL;
17035
0
    }
17036
98.9k
    expr_ty _res = NULL;
17037
98.9k
    if (_PyPegen_is_memoized(p, tstring_type, &_res)) {
17038
848
        p->level--;
17039
848
        return _res;
17040
848
    }
17041
98.0k
    int _mark = p->mark;
17042
98.0k
    { // TSTRING_START tstring_middle* TSTRING_END
17043
98.0k
        if (p->error_indicator) {
17044
0
            p->level--;
17045
0
            return NULL;
17046
0
        }
17047
98.0k
        D(fprintf(stderr, "%*c> tstring[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_START tstring_middle* TSTRING_END"));
17048
98.0k
        Token * a;
17049
98.0k
        asdl_seq * b;
17050
98.0k
        Token * c;
17051
98.0k
        if (
17052
98.0k
            (a = _PyPegen_expect_token(p, TSTRING_START))  // token='TSTRING_START'
17053
98.0k
            &&
17054
98.0k
            (b = _loop0_79_rule(p))  // tstring_middle*
17055
98.0k
            &&
17056
98.0k
            (c = _PyPegen_expect_token(p, TSTRING_END))  // token='TSTRING_END'
17057
98.0k
        )
17058
2.28k
        {
17059
2.28k
            D(fprintf(stderr, "%*c+ tstring[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_START tstring_middle* TSTRING_END"));
17060
2.28k
            _res = CHECK_VERSION ( expr_ty , 14 , "t-strings are" , _PyPegen_template_str ( p , a , ( asdl_expr_seq* ) b , c ) );
17061
2.28k
            if (_res == NULL && PyErr_Occurred()) {
17062
0
                p->error_indicator = 1;
17063
0
                p->level--;
17064
0
                return NULL;
17065
0
            }
17066
2.28k
            goto done;
17067
2.28k
        }
17068
95.7k
        p->mark = _mark;
17069
95.7k
        D(fprintf(stderr, "%*c%s tstring[%d-%d]: %s failed!\n", p->level, ' ',
17070
95.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TSTRING_START tstring_middle* TSTRING_END"));
17071
95.7k
    }
17072
0
    _res = NULL;
17073
98.0k
  done:
17074
98.0k
    _PyPegen_insert_memo(p, _mark, tstring_type, _res);
17075
98.0k
    p->level--;
17076
98.0k
    return _res;
17077
95.7k
}
17078
17079
// string: STRING
17080
static expr_ty
17081
string_rule(Parser *p)
17082
162k
{
17083
162k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17084
0
        _Pypegen_stack_overflow(p);
17085
0
    }
17086
162k
    if (p->error_indicator) {
17087
0
        p->level--;
17088
0
        return NULL;
17089
0
    }
17090
162k
    expr_ty _res = NULL;
17091
162k
    int _mark = p->mark;
17092
162k
    { // STRING
17093
162k
        if (p->error_indicator) {
17094
0
            p->level--;
17095
0
            return NULL;
17096
0
        }
17097
162k
        D(fprintf(stderr, "%*c> string[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING"));
17098
162k
        Token* s;
17099
162k
        if (
17100
162k
            (s = (Token*)_PyPegen_string_token(p))  // STRING
17101
162k
        )
17102
63.2k
        {
17103
63.2k
            D(fprintf(stderr, "%*c+ string[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING"));
17104
63.2k
            _res = _PyPegen_constant_from_string ( p , s );
17105
63.2k
            if (_res == NULL && PyErr_Occurred()) {
17106
357
                p->error_indicator = 1;
17107
357
                p->level--;
17108
357
                return NULL;
17109
357
            }
17110
62.9k
            goto done;
17111
63.2k
        }
17112
98.9k
        p->mark = _mark;
17113
98.9k
        D(fprintf(stderr, "%*c%s string[%d-%d]: %s failed!\n", p->level, ' ',
17114
98.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING"));
17115
98.9k
    }
17116
0
    _res = NULL;
17117
161k
  done:
17118
161k
    p->level--;
17119
161k
    return _res;
17120
98.9k
}
17121
17122
// strings: ((fstring | string | tstring))+
17123
static expr_ty
17124
strings_rule(Parser *p)
17125
155k
{
17126
155k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17127
0
        _Pypegen_stack_overflow(p);
17128
0
    }
17129
155k
    if (p->error_indicator) {
17130
0
        p->level--;
17131
0
        return NULL;
17132
0
    }
17133
155k
    expr_ty _res = NULL;
17134
155k
    if (_PyPegen_is_memoized(p, strings_type, &_res)) {
17135
57.0k
        p->level--;
17136
57.0k
        return _res;
17137
57.0k
    }
17138
98.6k
    int _mark = p->mark;
17139
98.6k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
17140
0
        p->error_indicator = 1;
17141
0
        p->level--;
17142
0
        return NULL;
17143
0
    }
17144
98.6k
    int _start_lineno = p->tokens[_mark]->lineno;
17145
98.6k
    UNUSED(_start_lineno); // Only used by EXTRA macro
17146
98.6k
    int _start_col_offset = p->tokens[_mark]->col_offset;
17147
98.6k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
17148
98.6k
    { // ((fstring | string | tstring))+
17149
98.6k
        if (p->error_indicator) {
17150
0
            p->level--;
17151
0
            return NULL;
17152
0
        }
17153
98.6k
        D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((fstring | string | tstring))+"));
17154
98.6k
        asdl_expr_seq* a;
17155
98.6k
        if (
17156
98.6k
            (a = (asdl_expr_seq*)_loop1_80_rule(p))  // ((fstring | string | tstring))+
17157
98.6k
        )
17158
46.8k
        {
17159
46.8k
            D(fprintf(stderr, "%*c+ strings[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((fstring | string | tstring))+"));
17160
46.8k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17161
46.8k
            if (_token == NULL) {
17162
0
                p->level--;
17163
0
                return NULL;
17164
0
            }
17165
46.8k
            int _end_lineno = _token->end_lineno;
17166
46.8k
            UNUSED(_end_lineno); // Only used by EXTRA macro
17167
46.8k
            int _end_col_offset = _token->end_col_offset;
17168
46.8k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
17169
46.8k
            _res = _PyPegen_concatenate_strings ( p , a , EXTRA );
17170
46.8k
            if (_res == NULL && PyErr_Occurred()) {
17171
4
                p->error_indicator = 1;
17172
4
                p->level--;
17173
4
                return NULL;
17174
4
            }
17175
46.8k
            goto done;
17176
46.8k
        }
17177
51.8k
        p->mark = _mark;
17178
51.8k
        D(fprintf(stderr, "%*c%s strings[%d-%d]: %s failed!\n", p->level, ' ',
17179
51.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((fstring | string | tstring))+"));
17180
51.8k
    }
17181
0
    _res = NULL;
17182
98.6k
  done:
17183
98.6k
    _PyPegen_insert_memo(p, _mark, strings_type, _res);
17184
98.6k
    p->level--;
17185
98.6k
    return _res;
17186
51.8k
}
17187
17188
// list: '[' star_named_expressions? ']'
17189
static expr_ty
17190
list_rule(Parser *p)
17191
169k
{
17192
169k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17193
1
        _Pypegen_stack_overflow(p);
17194
1
    }
17195
169k
    if (p->error_indicator) {
17196
1
        p->level--;
17197
1
        return NULL;
17198
1
    }
17199
169k
    expr_ty _res = NULL;
17200
169k
    int _mark = p->mark;
17201
169k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
17202
0
        p->error_indicator = 1;
17203
0
        p->level--;
17204
0
        return NULL;
17205
0
    }
17206
169k
    int _start_lineno = p->tokens[_mark]->lineno;
17207
169k
    UNUSED(_start_lineno); // Only used by EXTRA macro
17208
169k
    int _start_col_offset = p->tokens[_mark]->col_offset;
17209
169k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
17210
169k
    { // '[' star_named_expressions? ']'
17211
169k
        if (p->error_indicator) {
17212
0
            p->level--;
17213
0
            return NULL;
17214
0
        }
17215
169k
        D(fprintf(stderr, "%*c> list[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'"));
17216
169k
        Token * _literal;
17217
169k
        Token * _literal_1;
17218
169k
        void *a;
17219
169k
        if (
17220
169k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
17221
169k
            &&
17222
169k
            (a = star_named_expressions_rule(p), !p->error_indicator)  // star_named_expressions?
17223
169k
            &&
17224
169k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
17225
169k
        )
17226
15.0k
        {
17227
15.0k
            D(fprintf(stderr, "%*c+ list[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'"));
17228
15.0k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17229
15.0k
            if (_token == NULL) {
17230
0
                p->level--;
17231
0
                return NULL;
17232
0
            }
17233
15.0k
            int _end_lineno = _token->end_lineno;
17234
15.0k
            UNUSED(_end_lineno); // Only used by EXTRA macro
17235
15.0k
            int _end_col_offset = _token->end_col_offset;
17236
15.0k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
17237
15.0k
            _res = _PyAST_List ( a , Load , EXTRA );
17238
15.0k
            if (_res == NULL && PyErr_Occurred()) {
17239
0
                p->error_indicator = 1;
17240
0
                p->level--;
17241
0
                return NULL;
17242
0
            }
17243
15.0k
            goto done;
17244
15.0k
        }
17245
154k
        p->mark = _mark;
17246
154k
        D(fprintf(stderr, "%*c%s list[%d-%d]: %s failed!\n", p->level, ' ',
17247
154k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' star_named_expressions? ']'"));
17248
154k
    }
17249
0
    _res = NULL;
17250
169k
  done:
17251
169k
    p->level--;
17252
169k
    return _res;
17253
154k
}
17254
17255
// tuple: '(' [star_named_expression ',' star_named_expressions?] ')'
17256
static expr_ty
17257
tuple_rule(Parser *p)
17258
186k
{
17259
186k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17260
1
        _Pypegen_stack_overflow(p);
17261
1
    }
17262
186k
    if (p->error_indicator) {
17263
1
        p->level--;
17264
1
        return NULL;
17265
1
    }
17266
186k
    expr_ty _res = NULL;
17267
186k
    int _mark = p->mark;
17268
186k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
17269
0
        p->error_indicator = 1;
17270
0
        p->level--;
17271
0
        return NULL;
17272
0
    }
17273
186k
    int _start_lineno = p->tokens[_mark]->lineno;
17274
186k
    UNUSED(_start_lineno); // Only used by EXTRA macro
17275
186k
    int _start_col_offset = p->tokens[_mark]->col_offset;
17276
186k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
17277
186k
    { // '(' [star_named_expression ',' star_named_expressions?] ')'
17278
186k
        if (p->error_indicator) {
17279
0
            p->level--;
17280
0
            return NULL;
17281
0
        }
17282
186k
        D(fprintf(stderr, "%*c> tuple[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'"));
17283
186k
        Token * _literal;
17284
186k
        Token * _literal_1;
17285
186k
        void *a;
17286
186k
        if (
17287
186k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
17288
186k
            &&
17289
186k
            (a = _tmp_81_rule(p), !p->error_indicator)  // [star_named_expression ',' star_named_expressions?]
17290
186k
            &&
17291
186k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
17292
186k
        )
17293
39.6k
        {
17294
39.6k
            D(fprintf(stderr, "%*c+ tuple[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'"));
17295
39.6k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17296
39.6k
            if (_token == NULL) {
17297
0
                p->level--;
17298
0
                return NULL;
17299
0
            }
17300
39.6k
            int _end_lineno = _token->end_lineno;
17301
39.6k
            UNUSED(_end_lineno); // Only used by EXTRA macro
17302
39.6k
            int _end_col_offset = _token->end_col_offset;
17303
39.6k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
17304
39.6k
            _res = _PyAST_Tuple ( a , Load , EXTRA );
17305
39.6k
            if (_res == NULL && PyErr_Occurred()) {
17306
0
                p->error_indicator = 1;
17307
0
                p->level--;
17308
0
                return NULL;
17309
0
            }
17310
39.6k
            goto done;
17311
39.6k
        }
17312
146k
        p->mark = _mark;
17313
146k
        D(fprintf(stderr, "%*c%s tuple[%d-%d]: %s failed!\n", p->level, ' ',
17314
146k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'"));
17315
146k
    }
17316
0
    _res = NULL;
17317
186k
  done:
17318
186k
    p->level--;
17319
186k
    return _res;
17320
146k
}
17321
17322
// set: '{' star_named_expressions '}'
17323
static expr_ty
17324
set_rule(Parser *p)
17325
11.1k
{
17326
11.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17327
0
        _Pypegen_stack_overflow(p);
17328
0
    }
17329
11.1k
    if (p->error_indicator) {
17330
0
        p->level--;
17331
0
        return NULL;
17332
0
    }
17333
11.1k
    expr_ty _res = NULL;
17334
11.1k
    int _mark = p->mark;
17335
11.1k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
17336
0
        p->error_indicator = 1;
17337
0
        p->level--;
17338
0
        return NULL;
17339
0
    }
17340
11.1k
    int _start_lineno = p->tokens[_mark]->lineno;
17341
11.1k
    UNUSED(_start_lineno); // Only used by EXTRA macro
17342
11.1k
    int _start_col_offset = p->tokens[_mark]->col_offset;
17343
11.1k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
17344
11.1k
    { // '{' star_named_expressions '}'
17345
11.1k
        if (p->error_indicator) {
17346
0
            p->level--;
17347
0
            return NULL;
17348
0
        }
17349
11.1k
        D(fprintf(stderr, "%*c> set[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'"));
17350
11.1k
        Token * _literal;
17351
11.1k
        Token * _literal_1;
17352
11.1k
        asdl_expr_seq* a;
17353
11.1k
        if (
17354
11.1k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
17355
11.1k
            &&
17356
11.1k
            (a = star_named_expressions_rule(p))  // star_named_expressions
17357
11.1k
            &&
17358
11.1k
            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
17359
11.1k
        )
17360
1.14k
        {
17361
1.14k
            D(fprintf(stderr, "%*c+ set[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'"));
17362
1.14k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17363
1.14k
            if (_token == NULL) {
17364
0
                p->level--;
17365
0
                return NULL;
17366
0
            }
17367
1.14k
            int _end_lineno = _token->end_lineno;
17368
1.14k
            UNUSED(_end_lineno); // Only used by EXTRA macro
17369
1.14k
            int _end_col_offset = _token->end_col_offset;
17370
1.14k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
17371
1.14k
            _res = _PyAST_Set ( a , EXTRA );
17372
1.14k
            if (_res == NULL && PyErr_Occurred()) {
17373
0
                p->error_indicator = 1;
17374
0
                p->level--;
17375
0
                return NULL;
17376
0
            }
17377
1.14k
            goto done;
17378
1.14k
        }
17379
10.0k
        p->mark = _mark;
17380
10.0k
        D(fprintf(stderr, "%*c%s set[%d-%d]: %s failed!\n", p->level, ' ',
17381
10.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' star_named_expressions '}'"));
17382
10.0k
    }
17383
0
    _res = NULL;
17384
11.1k
  done:
17385
11.1k
    p->level--;
17386
11.1k
    return _res;
17387
10.0k
}
17388
17389
// dict: '{' double_starred_kvpairs? '}' | '{' invalid_double_starred_kvpairs '}'
17390
static expr_ty
17391
dict_rule(Parser *p)
17392
24.6k
{
17393
24.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17394
1
        _Pypegen_stack_overflow(p);
17395
1
    }
17396
24.6k
    if (p->error_indicator) {
17397
1
        p->level--;
17398
1
        return NULL;
17399
1
    }
17400
24.6k
    expr_ty _res = NULL;
17401
24.6k
    int _mark = p->mark;
17402
24.6k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
17403
0
        p->error_indicator = 1;
17404
0
        p->level--;
17405
0
        return NULL;
17406
0
    }
17407
24.6k
    int _start_lineno = p->tokens[_mark]->lineno;
17408
24.6k
    UNUSED(_start_lineno); // Only used by EXTRA macro
17409
24.6k
    int _start_col_offset = p->tokens[_mark]->col_offset;
17410
24.6k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
17411
24.6k
    { // '{' double_starred_kvpairs? '}'
17412
24.6k
        if (p->error_indicator) {
17413
0
            p->level--;
17414
0
            return NULL;
17415
0
        }
17416
24.6k
        D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
17417
24.6k
        Token * _literal;
17418
24.6k
        Token * _literal_1;
17419
24.6k
        void *a;
17420
24.6k
        if (
17421
24.6k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
17422
24.6k
            &&
17423
24.6k
            (a = double_starred_kvpairs_rule(p), !p->error_indicator)  // double_starred_kvpairs?
17424
24.6k
            &&
17425
24.6k
            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
17426
24.6k
        )
17427
4.42k
        {
17428
4.42k
            D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
17429
4.42k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17430
4.42k
            if (_token == NULL) {
17431
0
                p->level--;
17432
0
                return NULL;
17433
0
            }
17434
4.42k
            int _end_lineno = _token->end_lineno;
17435
4.42k
            UNUSED(_end_lineno); // Only used by EXTRA macro
17436
4.42k
            int _end_col_offset = _token->end_col_offset;
17437
4.42k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
17438
4.42k
            _res = _PyAST_Dict ( CHECK ( asdl_expr_seq* , _PyPegen_get_keys ( p , a ) ) , CHECK ( asdl_expr_seq* , _PyPegen_get_values ( p , a ) ) , EXTRA );
17439
4.42k
            if (_res == NULL && PyErr_Occurred()) {
17440
0
                p->error_indicator = 1;
17441
0
                p->level--;
17442
0
                return NULL;
17443
0
            }
17444
4.42k
            goto done;
17445
4.42k
        }
17446
20.2k
        p->mark = _mark;
17447
20.2k
        D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ',
17448
20.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
17449
20.2k
    }
17450
0
    { // '{' invalid_double_starred_kvpairs '}'
17451
20.2k
        if (p->error_indicator) {
17452
8.80k
            p->level--;
17453
8.80k
            return NULL;
17454
8.80k
        }
17455
11.4k
        D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'"));
17456
11.4k
        Token * _literal;
17457
11.4k
        Token * _literal_1;
17458
11.4k
        void *invalid_double_starred_kvpairs_var;
17459
11.4k
        if (
17460
11.4k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
17461
11.4k
            &&
17462
11.4k
            (invalid_double_starred_kvpairs_var = invalid_double_starred_kvpairs_rule(p))  // invalid_double_starred_kvpairs
17463
11.4k
            &&
17464
11.4k
            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
17465
11.4k
        )
17466
0
        {
17467
0
            D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'"));
17468
0
            _res = _PyPegen_dummy_name(p, _literal, invalid_double_starred_kvpairs_var, _literal_1);
17469
0
            goto done;
17470
0
        }
17471
11.4k
        p->mark = _mark;
17472
11.4k
        D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ',
17473
11.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'"));
17474
11.4k
    }
17475
0
    _res = NULL;
17476
15.8k
  done:
17477
15.8k
    p->level--;
17478
15.8k
    return _res;
17479
11.4k
}
17480
17481
// double_starred_kvpairs: ','.double_starred_kvpair+ ','?
17482
static asdl_seq*
17483
double_starred_kvpairs_rule(Parser *p)
17484
24.6k
{
17485
24.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17486
1
        _Pypegen_stack_overflow(p);
17487
1
    }
17488
24.6k
    if (p->error_indicator) {
17489
1
        p->level--;
17490
1
        return NULL;
17491
1
    }
17492
24.6k
    asdl_seq* _res = NULL;
17493
24.6k
    int _mark = p->mark;
17494
24.6k
    { // ','.double_starred_kvpair+ ','?
17495
24.6k
        if (p->error_indicator) {
17496
0
            p->level--;
17497
0
            return NULL;
17498
0
        }
17499
24.6k
        D(fprintf(stderr, "%*c> double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?"));
17500
24.6k
        void *_opt_var;
17501
24.6k
        UNUSED(_opt_var); // Silence compiler warnings
17502
24.6k
        asdl_seq * a;
17503
24.6k
        if (
17504
24.6k
            (a = _gather_83_rule(p))  // ','.double_starred_kvpair+
17505
24.6k
            &&
17506
24.6k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
17507
24.6k
        )
17508
5.43k
        {
17509
5.43k
            D(fprintf(stderr, "%*c+ double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?"));
17510
5.43k
            _res = a;
17511
5.43k
            if (_res == NULL && PyErr_Occurred()) {
17512
0
                p->error_indicator = 1;
17513
0
                p->level--;
17514
0
                return NULL;
17515
0
            }
17516
5.43k
            goto done;
17517
5.43k
        }
17518
19.2k
        p->mark = _mark;
17519
19.2k
        D(fprintf(stderr, "%*c%s double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ',
17520
19.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ','?"));
17521
19.2k
    }
17522
0
    _res = NULL;
17523
24.6k
  done:
17524
24.6k
    p->level--;
17525
24.6k
    return _res;
17526
19.2k
}
17527
17528
// double_starred_kvpair: '**' bitwise_or | kvpair
17529
static KeyValuePair*
17530
double_starred_kvpair_rule(Parser *p)
17531
69.7k
{
17532
69.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17533
1
        _Pypegen_stack_overflow(p);
17534
1
    }
17535
69.7k
    if (p->error_indicator) {
17536
1
        p->level--;
17537
1
        return NULL;
17538
1
    }
17539
69.7k
    KeyValuePair* _res = NULL;
17540
69.7k
    int _mark = p->mark;
17541
69.7k
    { // '**' bitwise_or
17542
69.7k
        if (p->error_indicator) {
17543
0
            p->level--;
17544
0
            return NULL;
17545
0
        }
17546
69.7k
        D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or"));
17547
69.7k
        Token * _literal;
17548
69.7k
        expr_ty a;
17549
69.7k
        if (
17550
69.7k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
17551
69.7k
            &&
17552
69.7k
            (a = bitwise_or_rule(p))  // bitwise_or
17553
69.7k
        )
17554
1.06k
        {
17555
1.06k
            D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or"));
17556
1.06k
            _res = _PyPegen_key_value_pair ( p , NULL , a );
17557
1.06k
            if (_res == NULL && PyErr_Occurred()) {
17558
0
                p->error_indicator = 1;
17559
0
                p->level--;
17560
0
                return NULL;
17561
0
            }
17562
1.06k
            goto done;
17563
1.06k
        }
17564
68.6k
        p->mark = _mark;
17565
68.6k
        D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
17566
68.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' bitwise_or"));
17567
68.6k
    }
17568
0
    { // kvpair
17569
68.6k
        if (p->error_indicator) {
17570
450
            p->level--;
17571
450
            return NULL;
17572
450
        }
17573
68.1k
        D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kvpair"));
17574
68.1k
        KeyValuePair* kvpair_var;
17575
68.1k
        if (
17576
68.1k
            (kvpair_var = kvpair_rule(p))  // kvpair
17577
68.1k
        )
17578
38.7k
        {
17579
38.7k
            D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kvpair"));
17580
38.7k
            _res = kvpair_var;
17581
38.7k
            goto done;
17582
38.7k
        }
17583
29.4k
        p->mark = _mark;
17584
29.4k
        D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
17585
29.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kvpair"));
17586
29.4k
    }
17587
0
    _res = NULL;
17588
69.2k
  done:
17589
69.2k
    p->level--;
17590
69.2k
    return _res;
17591
29.4k
}
17592
17593
// kvpair: expression ':' expression
17594
static KeyValuePair*
17595
kvpair_rule(Parser *p)
17596
77.9k
{
17597
77.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17598
1
        _Pypegen_stack_overflow(p);
17599
1
    }
17600
77.9k
    if (p->error_indicator) {
17601
1
        p->level--;
17602
1
        return NULL;
17603
1
    }
17604
77.9k
    KeyValuePair* _res = NULL;
17605
77.9k
    int _mark = p->mark;
17606
77.9k
    { // expression ':' expression
17607
77.9k
        if (p->error_indicator) {
17608
0
            p->level--;
17609
0
            return NULL;
17610
0
        }
17611
77.9k
        D(fprintf(stderr, "%*c> kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
17612
77.9k
        Token * _literal;
17613
77.9k
        expr_ty a;
17614
77.9k
        expr_ty b;
17615
77.9k
        if (
17616
77.9k
            (a = expression_rule(p))  // expression
17617
77.9k
            &&
17618
77.9k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
17619
77.9k
            &&
17620
77.9k
            (b = expression_rule(p))  // expression
17621
77.9k
        )
17622
41.1k
        {
17623
41.1k
            D(fprintf(stderr, "%*c+ kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
17624
41.1k
            _res = _PyPegen_key_value_pair ( p , a , b );
17625
41.1k
            if (_res == NULL && PyErr_Occurred()) {
17626
0
                p->error_indicator = 1;
17627
0
                p->level--;
17628
0
                return NULL;
17629
0
            }
17630
41.1k
            goto done;
17631
41.1k
        }
17632
36.8k
        p->mark = _mark;
17633
36.8k
        D(fprintf(stderr, "%*c%s kvpair[%d-%d]: %s failed!\n", p->level, ' ',
17634
36.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' expression"));
17635
36.8k
    }
17636
0
    _res = NULL;
17637
77.9k
  done:
17638
77.9k
    p->level--;
17639
77.9k
    return _res;
17640
36.8k
}
17641
17642
// for_if_clauses: for_if_clause+
17643
static asdl_comprehension_seq*
17644
for_if_clauses_rule(Parser *p)
17645
88.6k
{
17646
88.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17647
0
        _Pypegen_stack_overflow(p);
17648
0
    }
17649
88.6k
    if (p->error_indicator) {
17650
0
        p->level--;
17651
0
        return NULL;
17652
0
    }
17653
88.6k
    asdl_comprehension_seq* _res = NULL;
17654
88.6k
    int _mark = p->mark;
17655
88.6k
    { // for_if_clause+
17656
88.6k
        if (p->error_indicator) {
17657
0
            p->level--;
17658
0
            return NULL;
17659
0
        }
17660
88.6k
        D(fprintf(stderr, "%*c> for_if_clauses[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause+"));
17661
88.6k
        asdl_comprehension_seq* a;
17662
88.6k
        if (
17663
88.6k
            (a = (asdl_comprehension_seq*)_loop1_84_rule(p))  // for_if_clause+
17664
88.6k
        )
17665
8.75k
        {
17666
8.75k
            D(fprintf(stderr, "%*c+ for_if_clauses[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "for_if_clause+"));
17667
8.75k
            _res = a;
17668
8.75k
            if (_res == NULL && PyErr_Occurred()) {
17669
0
                p->error_indicator = 1;
17670
0
                p->level--;
17671
0
                return NULL;
17672
0
            }
17673
8.75k
            goto done;
17674
8.75k
        }
17675
79.9k
        p->mark = _mark;
17676
79.9k
        D(fprintf(stderr, "%*c%s for_if_clauses[%d-%d]: %s failed!\n", p->level, ' ',
17677
79.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause+"));
17678
79.9k
    }
17679
0
    _res = NULL;
17680
88.6k
  done:
17681
88.6k
    p->level--;
17682
88.6k
    return _res;
17683
79.9k
}
17684
17685
// for_if_clause:
17686
//     | 'async' 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
17687
//     | 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
17688
//     | invalid_for_if_clause
17689
//     | invalid_for_target
17690
static comprehension_ty
17691
for_if_clause_rule(Parser *p)
17692
98.3k
{
17693
98.3k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17694
0
        _Pypegen_stack_overflow(p);
17695
0
    }
17696
98.3k
    if (p->error_indicator) {
17697
71
        p->level--;
17698
71
        return NULL;
17699
71
    }
17700
98.3k
    comprehension_ty _res = NULL;
17701
98.3k
    int _mark = p->mark;
17702
98.3k
    { // 'async' 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
17703
98.3k
        if (p->error_indicator) {
17704
0
            p->level--;
17705
0
            return NULL;
17706
0
        }
17707
98.3k
        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17708
98.3k
        int _cut_var = 0;
17709
98.3k
        Token * _keyword;
17710
98.3k
        Token * _keyword_1;
17711
98.3k
        Token * _keyword_2;
17712
98.3k
        expr_ty a;
17713
98.3k
        expr_ty b;
17714
98.3k
        asdl_expr_seq* c;
17715
98.3k
        if (
17716
98.3k
            (_keyword = _PyPegen_expect_token(p, 703))  // token='async'
17717
98.3k
            &&
17718
98.3k
            (_keyword_1 = _PyPegen_expect_token(p, 699))  // token='for'
17719
98.3k
            &&
17720
98.3k
            (a = star_targets_rule(p))  // star_targets
17721
98.3k
            &&
17722
98.3k
            (_keyword_2 = _PyPegen_expect_token(p, 700))  // token='in'
17723
98.3k
            &&
17724
98.3k
            (_cut_var = 1)
17725
98.3k
            &&
17726
98.3k
            (b = disjunction_rule(p))  // disjunction
17727
98.3k
            &&
17728
98.3k
            (c = (asdl_expr_seq*)_loop0_85_rule(p))  // (('if' disjunction))*
17729
98.3k
        )
17730
513
        {
17731
513
            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))*"));
17732
513
            _res = CHECK_VERSION ( comprehension_ty , 6 , "Async comprehensions are" , _PyAST_comprehension ( a , b , c , 1 , p -> arena ) );
17733
513
            if (_res == NULL && PyErr_Occurred()) {
17734
0
                p->error_indicator = 1;
17735
0
                p->level--;
17736
0
                return NULL;
17737
0
            }
17738
513
            goto done;
17739
513
        }
17740
97.7k
        p->mark = _mark;
17741
97.7k
        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
17742
97.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17743
97.7k
        if (_cut_var) {
17744
67
            p->level--;
17745
67
            return NULL;
17746
67
        }
17747
97.7k
    }
17748
97.7k
    { // 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
17749
97.7k
        if (p->error_indicator) {
17750
196
            p->level--;
17751
196
            return NULL;
17752
196
        }
17753
97.5k
        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17754
97.5k
        int _cut_var = 0;
17755
97.5k
        Token * _keyword;
17756
97.5k
        Token * _keyword_1;
17757
97.5k
        expr_ty a;
17758
97.5k
        expr_ty b;
17759
97.5k
        asdl_expr_seq* c;
17760
97.5k
        if (
17761
97.5k
            (_keyword = _PyPegen_expect_token(p, 699))  // token='for'
17762
97.5k
            &&
17763
97.5k
            (a = star_targets_rule(p))  // star_targets
17764
97.5k
            &&
17765
97.5k
            (_keyword_1 = _PyPegen_expect_token(p, 700))  // token='in'
17766
97.5k
            &&
17767
97.5k
            (_cut_var = 1)
17768
97.5k
            &&
17769
97.5k
            (b = disjunction_rule(p))  // disjunction
17770
97.5k
            &&
17771
97.5k
            (c = (asdl_expr_seq*)_loop0_85_rule(p))  // (('if' disjunction))*
17772
97.5k
        )
17773
9.19k
        {
17774
9.19k
            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17775
9.19k
            _res = _PyAST_comprehension ( a , b , c , 0 , p -> arena );
17776
9.19k
            if (_res == NULL && PyErr_Occurred()) {
17777
0
                p->error_indicator = 1;
17778
0
                p->level--;
17779
0
                return NULL;
17780
0
            }
17781
9.19k
            goto done;
17782
9.19k
        }
17783
88.3k
        p->mark = _mark;
17784
88.3k
        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
17785
88.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17786
88.3k
        if (_cut_var) {
17787
236
            p->level--;
17788
236
            return NULL;
17789
236
        }
17790
88.3k
    }
17791
88.0k
    if (p->call_invalid_rules) { // invalid_for_if_clause
17792
44.9k
        if (p->error_indicator) {
17793
849
            p->level--;
17794
849
            return NULL;
17795
849
        }
17796
44.0k
        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_if_clause"));
17797
44.0k
        void *invalid_for_if_clause_var;
17798
44.0k
        if (
17799
44.0k
            (invalid_for_if_clause_var = invalid_for_if_clause_rule(p))  // invalid_for_if_clause
17800
44.0k
        )
17801
0
        {
17802
0
            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_if_clause"));
17803
0
            _res = invalid_for_if_clause_var;
17804
0
            goto done;
17805
0
        }
17806
44.0k
        p->mark = _mark;
17807
44.0k
        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
17808
44.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_if_clause"));
17809
44.0k
    }
17810
87.2k
    if (p->call_invalid_rules) { // invalid_for_target
17811
44.0k
        if (p->error_indicator) {
17812
281
            p->level--;
17813
281
            return NULL;
17814
281
        }
17815
43.8k
        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
17816
43.8k
        void *invalid_for_target_var;
17817
43.8k
        if (
17818
43.8k
            (invalid_for_target_var = invalid_for_target_rule(p))  // invalid_for_target
17819
43.8k
        )
17820
0
        {
17821
0
            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
17822
0
            _res = invalid_for_target_var;
17823
0
            goto done;
17824
0
        }
17825
43.8k
        p->mark = _mark;
17826
43.8k
        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
17827
43.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target"));
17828
43.8k
    }
17829
86.9k
    _res = NULL;
17830
96.6k
  done:
17831
96.6k
    p->level--;
17832
96.6k
    return _res;
17833
86.9k
}
17834
17835
// listcomp: '[' named_expression for_if_clauses ']' | invalid_comprehension
17836
static expr_ty
17837
listcomp_rule(Parser *p)
17838
28.8k
{
17839
28.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17840
0
        _Pypegen_stack_overflow(p);
17841
0
    }
17842
28.8k
    if (p->error_indicator) {
17843
0
        p->level--;
17844
0
        return NULL;
17845
0
    }
17846
28.8k
    expr_ty _res = NULL;
17847
28.8k
    int _mark = p->mark;
17848
28.8k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
17849
0
        p->error_indicator = 1;
17850
0
        p->level--;
17851
0
        return NULL;
17852
0
    }
17853
28.8k
    int _start_lineno = p->tokens[_mark]->lineno;
17854
28.8k
    UNUSED(_start_lineno); // Only used by EXTRA macro
17855
28.8k
    int _start_col_offset = p->tokens[_mark]->col_offset;
17856
28.8k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
17857
28.8k
    { // '[' named_expression for_if_clauses ']'
17858
28.8k
        if (p->error_indicator) {
17859
0
            p->level--;
17860
0
            return NULL;
17861
0
        }
17862
28.8k
        D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' named_expression for_if_clauses ']'"));
17863
28.8k
        Token * _literal;
17864
28.8k
        Token * _literal_1;
17865
28.8k
        expr_ty a;
17866
28.8k
        asdl_comprehension_seq* b;
17867
28.8k
        if (
17868
28.8k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
17869
28.8k
            &&
17870
28.8k
            (a = named_expression_rule(p))  // named_expression
17871
28.8k
            &&
17872
28.8k
            (b = for_if_clauses_rule(p))  // for_if_clauses
17873
28.8k
            &&
17874
28.8k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
17875
28.8k
        )
17876
1.35k
        {
17877
1.35k
            D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' named_expression for_if_clauses ']'"));
17878
1.35k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17879
1.35k
            if (_token == NULL) {
17880
0
                p->level--;
17881
0
                return NULL;
17882
0
            }
17883
1.35k
            int _end_lineno = _token->end_lineno;
17884
1.35k
            UNUSED(_end_lineno); // Only used by EXTRA macro
17885
1.35k
            int _end_col_offset = _token->end_col_offset;
17886
1.35k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
17887
1.35k
            _res = _PyAST_ListComp ( a , b , EXTRA );
17888
1.35k
            if (_res == NULL && PyErr_Occurred()) {
17889
0
                p->error_indicator = 1;
17890
0
                p->level--;
17891
0
                return NULL;
17892
0
            }
17893
1.35k
            goto done;
17894
1.35k
        }
17895
27.5k
        p->mark = _mark;
17896
27.5k
        D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ',
17897
27.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' named_expression for_if_clauses ']'"));
17898
27.5k
    }
17899
27.5k
    if (p->call_invalid_rules) { // invalid_comprehension
17900
9.41k
        if (p->error_indicator) {
17901
232
            p->level--;
17902
232
            return NULL;
17903
232
        }
17904
9.18k
        D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
17905
9.18k
        void *invalid_comprehension_var;
17906
9.18k
        if (
17907
9.18k
            (invalid_comprehension_var = invalid_comprehension_rule(p))  // invalid_comprehension
17908
9.18k
        )
17909
0
        {
17910
0
            D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
17911
0
            _res = invalid_comprehension_var;
17912
0
            goto done;
17913
0
        }
17914
9.18k
        p->mark = _mark;
17915
9.18k
        D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ',
17916
9.18k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension"));
17917
9.18k
    }
17918
27.2k
    _res = NULL;
17919
28.6k
  done:
17920
28.6k
    p->level--;
17921
28.6k
    return _res;
17922
27.2k
}
17923
17924
// setcomp: '{' named_expression for_if_clauses '}' | invalid_comprehension
17925
static expr_ty
17926
setcomp_rule(Parser *p)
17927
8.34k
{
17928
8.34k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
17929
0
        _Pypegen_stack_overflow(p);
17930
0
    }
17931
8.34k
    if (p->error_indicator) {
17932
0
        p->level--;
17933
0
        return NULL;
17934
0
    }
17935
8.34k
    expr_ty _res = NULL;
17936
8.34k
    int _mark = p->mark;
17937
8.34k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
17938
0
        p->error_indicator = 1;
17939
0
        p->level--;
17940
0
        return NULL;
17941
0
    }
17942
8.34k
    int _start_lineno = p->tokens[_mark]->lineno;
17943
8.34k
    UNUSED(_start_lineno); // Only used by EXTRA macro
17944
8.34k
    int _start_col_offset = p->tokens[_mark]->col_offset;
17945
8.34k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
17946
8.34k
    { // '{' named_expression for_if_clauses '}'
17947
8.34k
        if (p->error_indicator) {
17948
0
            p->level--;
17949
0
            return NULL;
17950
0
        }
17951
8.34k
        D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' named_expression for_if_clauses '}'"));
17952
8.34k
        Token * _literal;
17953
8.34k
        Token * _literal_1;
17954
8.34k
        expr_ty a;
17955
8.34k
        asdl_comprehension_seq* b;
17956
8.34k
        if (
17957
8.34k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
17958
8.34k
            &&
17959
8.34k
            (a = named_expression_rule(p))  // named_expression
17960
8.34k
            &&
17961
8.34k
            (b = for_if_clauses_rule(p))  // for_if_clauses
17962
8.34k
            &&
17963
8.34k
            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
17964
8.34k
        )
17965
196
        {
17966
196
            D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' named_expression for_if_clauses '}'"));
17967
196
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17968
196
            if (_token == NULL) {
17969
0
                p->level--;
17970
0
                return NULL;
17971
0
            }
17972
196
            int _end_lineno = _token->end_lineno;
17973
196
            UNUSED(_end_lineno); // Only used by EXTRA macro
17974
196
            int _end_col_offset = _token->end_col_offset;
17975
196
            UNUSED(_end_col_offset); // Only used by EXTRA macro
17976
196
            _res = _PyAST_SetComp ( a , b , EXTRA );
17977
196
            if (_res == NULL && PyErr_Occurred()) {
17978
0
                p->error_indicator = 1;
17979
0
                p->level--;
17980
0
                return NULL;
17981
0
            }
17982
196
            goto done;
17983
196
        }
17984
8.14k
        p->mark = _mark;
17985
8.14k
        D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ',
17986
8.14k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' named_expression for_if_clauses '}'"));
17987
8.14k
    }
17988
8.14k
    if (p->call_invalid_rules) { // invalid_comprehension
17989
3.45k
        if (p->error_indicator) {
17990
56
            p->level--;
17991
56
            return NULL;
17992
56
        }
17993
3.40k
        D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
17994
3.40k
        void *invalid_comprehension_var;
17995
3.40k
        if (
17996
3.40k
            (invalid_comprehension_var = invalid_comprehension_rule(p))  // invalid_comprehension
17997
3.40k
        )
17998
0
        {
17999
0
            D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
18000
0
            _res = invalid_comprehension_var;
18001
0
            goto done;
18002
0
        }
18003
3.40k
        p->mark = _mark;
18004
3.40k
        D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ',
18005
3.40k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension"));
18006
3.40k
    }
18007
8.09k
    _res = NULL;
18008
8.28k
  done:
18009
8.28k
    p->level--;
18010
8.28k
    return _res;
18011
8.09k
}
18012
18013
// genexp:
18014
//     | '(' (assignment_expression | expression !':=') for_if_clauses ')'
18015
//     | invalid_comprehension
18016
static expr_ty
18017
genexp_rule(Parser *p)
18018
591k
{
18019
591k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18020
0
        _Pypegen_stack_overflow(p);
18021
0
    }
18022
591k
    if (p->error_indicator) {
18023
0
        p->level--;
18024
0
        return NULL;
18025
0
    }
18026
591k
    expr_ty _res = NULL;
18027
591k
    int _mark = p->mark;
18028
591k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
18029
0
        p->error_indicator = 1;
18030
0
        p->level--;
18031
0
        return NULL;
18032
0
    }
18033
591k
    int _start_lineno = p->tokens[_mark]->lineno;
18034
591k
    UNUSED(_start_lineno); // Only used by EXTRA macro
18035
591k
    int _start_col_offset = p->tokens[_mark]->col_offset;
18036
591k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
18037
591k
    { // '(' (assignment_expression | expression !':=') for_if_clauses ')'
18038
591k
        if (p->error_indicator) {
18039
0
            p->level--;
18040
0
            return NULL;
18041
0
        }
18042
591k
        D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (assignment_expression | expression !':=') for_if_clauses ')'"));
18043
591k
        Token * _literal;
18044
591k
        Token * _literal_1;
18045
591k
        void *a;
18046
591k
        asdl_comprehension_seq* b;
18047
591k
        if (
18048
591k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
18049
591k
            &&
18050
591k
            (a = _tmp_86_rule(p))  // assignment_expression | expression !':='
18051
591k
            &&
18052
591k
            (b = for_if_clauses_rule(p))  // for_if_clauses
18053
591k
            &&
18054
591k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
18055
591k
        )
18056
4.43k
        {
18057
4.43k
            D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (assignment_expression | expression !':=') for_if_clauses ')'"));
18058
4.43k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18059
4.43k
            if (_token == NULL) {
18060
0
                p->level--;
18061
0
                return NULL;
18062
0
            }
18063
4.43k
            int _end_lineno = _token->end_lineno;
18064
4.43k
            UNUSED(_end_lineno); // Only used by EXTRA macro
18065
4.43k
            int _end_col_offset = _token->end_col_offset;
18066
4.43k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
18067
4.43k
            _res = _PyAST_GeneratorExp ( a , b , EXTRA );
18068
4.43k
            if (_res == NULL && PyErr_Occurred()) {
18069
0
                p->error_indicator = 1;
18070
0
                p->level--;
18071
0
                return NULL;
18072
0
            }
18073
4.43k
            goto done;
18074
4.43k
        }
18075
587k
        p->mark = _mark;
18076
587k
        D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ',
18077
587k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' (assignment_expression | expression !':=') for_if_clauses ')'"));
18078
587k
    }
18079
587k
    if (p->call_invalid_rules) { // invalid_comprehension
18080
194k
        if (p->error_indicator) {
18081
2.42k
            p->level--;
18082
2.42k
            return NULL;
18083
2.42k
        }
18084
192k
        D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
18085
192k
        void *invalid_comprehension_var;
18086
192k
        if (
18087
192k
            (invalid_comprehension_var = invalid_comprehension_rule(p))  // invalid_comprehension
18088
192k
        )
18089
0
        {
18090
0
            D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
18091
0
            _res = invalid_comprehension_var;
18092
0
            goto done;
18093
0
        }
18094
192k
        p->mark = _mark;
18095
192k
        D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ',
18096
192k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension"));
18097
192k
    }
18098
584k
    _res = NULL;
18099
589k
  done:
18100
589k
    p->level--;
18101
589k
    return _res;
18102
584k
}
18103
18104
// dictcomp: '{' kvpair for_if_clauses '}' | invalid_dict_comprehension
18105
static expr_ty
18106
dictcomp_rule(Parser *p)
18107
9.76k
{
18108
9.76k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18109
0
        _Pypegen_stack_overflow(p);
18110
0
    }
18111
9.76k
    if (p->error_indicator) {
18112
0
        p->level--;
18113
0
        return NULL;
18114
0
    }
18115
9.76k
    expr_ty _res = NULL;
18116
9.76k
    int _mark = p->mark;
18117
9.76k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
18118
0
        p->error_indicator = 1;
18119
0
        p->level--;
18120
0
        return NULL;
18121
0
    }
18122
9.76k
    int _start_lineno = p->tokens[_mark]->lineno;
18123
9.76k
    UNUSED(_start_lineno); // Only used by EXTRA macro
18124
9.76k
    int _start_col_offset = p->tokens[_mark]->col_offset;
18125
9.76k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
18126
9.76k
    { // '{' kvpair for_if_clauses '}'
18127
9.76k
        if (p->error_indicator) {
18128
0
            p->level--;
18129
0
            return NULL;
18130
0
        }
18131
9.76k
        D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
18132
9.76k
        Token * _literal;
18133
9.76k
        Token * _literal_1;
18134
9.76k
        KeyValuePair* a;
18135
9.76k
        asdl_comprehension_seq* b;
18136
9.76k
        if (
18137
9.76k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
18138
9.76k
            &&
18139
9.76k
            (a = kvpair_rule(p))  // kvpair
18140
9.76k
            &&
18141
9.76k
            (b = for_if_clauses_rule(p))  // for_if_clauses
18142
9.76k
            &&
18143
9.76k
            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
18144
9.76k
        )
18145
1.22k
        {
18146
1.22k
            D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
18147
1.22k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18148
1.22k
            if (_token == NULL) {
18149
0
                p->level--;
18150
0
                return NULL;
18151
0
            }
18152
1.22k
            int _end_lineno = _token->end_lineno;
18153
1.22k
            UNUSED(_end_lineno); // Only used by EXTRA macro
18154
1.22k
            int _end_col_offset = _token->end_col_offset;
18155
1.22k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
18156
1.22k
            _res = _PyAST_DictComp ( a -> key , a -> value , b , EXTRA );
18157
1.22k
            if (_res == NULL && PyErr_Occurred()) {
18158
0
                p->error_indicator = 1;
18159
0
                p->level--;
18160
0
                return NULL;
18161
0
            }
18162
1.22k
            goto done;
18163
1.22k
        }
18164
8.54k
        p->mark = _mark;
18165
8.54k
        D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ',
18166
8.54k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
18167
8.54k
    }
18168
8.54k
    if (p->call_invalid_rules) { // invalid_dict_comprehension
18169
3.68k
        if (p->error_indicator) {
18170
198
            p->level--;
18171
198
            return NULL;
18172
198
        }
18173
3.48k
        D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_dict_comprehension"));
18174
3.48k
        void *invalid_dict_comprehension_var;
18175
3.48k
        if (
18176
3.48k
            (invalid_dict_comprehension_var = invalid_dict_comprehension_rule(p))  // invalid_dict_comprehension
18177
3.48k
        )
18178
0
        {
18179
0
            D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_dict_comprehension"));
18180
0
            _res = invalid_dict_comprehension_var;
18181
0
            goto done;
18182
0
        }
18183
3.48k
        p->mark = _mark;
18184
3.48k
        D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ',
18185
3.48k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_dict_comprehension"));
18186
3.48k
    }
18187
8.34k
    _res = NULL;
18188
9.56k
  done:
18189
9.56k
    p->level--;
18190
9.56k
    return _res;
18191
8.34k
}
18192
18193
// arguments: args ','? &')' | invalid_arguments
18194
static expr_ty
18195
arguments_rule(Parser *p)
18196
58.0k
{
18197
58.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18198
0
        _Pypegen_stack_overflow(p);
18199
0
    }
18200
58.0k
    if (p->error_indicator) {
18201
0
        p->level--;
18202
0
        return NULL;
18203
0
    }
18204
58.0k
    expr_ty _res = NULL;
18205
58.0k
    if (_PyPegen_is_memoized(p, arguments_type, &_res)) {
18206
14.4k
        p->level--;
18207
14.4k
        return _res;
18208
14.4k
    }
18209
43.6k
    int _mark = p->mark;
18210
43.6k
    { // args ','? &')'
18211
43.6k
        if (p->error_indicator) {
18212
0
            p->level--;
18213
0
            return NULL;
18214
0
        }
18215
43.6k
        D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','? &')'"));
18216
43.6k
        void *_opt_var;
18217
43.6k
        UNUSED(_opt_var); // Silence compiler warnings
18218
43.6k
        expr_ty a;
18219
43.6k
        if (
18220
43.6k
            (a = args_rule(p))  // args
18221
43.6k
            &&
18222
43.6k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
18223
43.6k
            &&
18224
43.6k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
18225
43.6k
        )
18226
17.7k
        {
18227
17.7k
            D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','? &')'"));
18228
17.7k
            _res = a;
18229
17.7k
            if (_res == NULL && PyErr_Occurred()) {
18230
0
                p->error_indicator = 1;
18231
0
                p->level--;
18232
0
                return NULL;
18233
0
            }
18234
17.7k
            goto done;
18235
17.7k
        }
18236
25.8k
        p->mark = _mark;
18237
25.8k
        D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ',
18238
25.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ','? &')'"));
18239
25.8k
    }
18240
25.8k
    if (p->call_invalid_rules) { // invalid_arguments
18241
8.45k
        if (p->error_indicator) {
18242
970
            p->level--;
18243
970
            return NULL;
18244
970
        }
18245
7.48k
        D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_arguments"));
18246
7.48k
        void *invalid_arguments_var;
18247
7.48k
        if (
18248
7.48k
            (invalid_arguments_var = invalid_arguments_rule(p))  // invalid_arguments
18249
7.48k
        )
18250
0
        {
18251
0
            D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_arguments"));
18252
0
            _res = invalid_arguments_var;
18253
0
            goto done;
18254
0
        }
18255
7.48k
        p->mark = _mark;
18256
7.48k
        D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ',
18257
7.48k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_arguments"));
18258
7.48k
    }
18259
24.9k
    _res = NULL;
18260
42.6k
  done:
18261
42.6k
    _PyPegen_insert_memo(p, _mark, arguments_type, _res);
18262
42.6k
    p->level--;
18263
42.6k
    return _res;
18264
24.9k
}
18265
18266
// args:
18267
//     | ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]
18268
//     | kwargs
18269
static expr_ty
18270
args_rule(Parser *p)
18271
71.7k
{
18272
71.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18273
0
        _Pypegen_stack_overflow(p);
18274
0
    }
18275
71.7k
    if (p->error_indicator) {
18276
0
        p->level--;
18277
0
        return NULL;
18278
0
    }
18279
71.7k
    expr_ty _res = NULL;
18280
71.7k
    int _mark = p->mark;
18281
71.7k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
18282
1
        p->error_indicator = 1;
18283
1
        p->level--;
18284
1
        return NULL;
18285
1
    }
18286
71.7k
    int _start_lineno = p->tokens[_mark]->lineno;
18287
71.7k
    UNUSED(_start_lineno); // Only used by EXTRA macro
18288
71.7k
    int _start_col_offset = p->tokens[_mark]->col_offset;
18289
71.7k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
18290
71.7k
    { // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]
18291
71.7k
        if (p->error_indicator) {
18292
0
            p->level--;
18293
0
            return NULL;
18294
0
        }
18295
71.7k
        D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]"));
18296
71.7k
        asdl_expr_seq* a;
18297
71.7k
        void *b;
18298
71.7k
        if (
18299
71.7k
            (a = (asdl_expr_seq*)_gather_88_rule(p))  // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+
18300
71.7k
            &&
18301
71.7k
            (b = _tmp_89_rule(p), !p->error_indicator)  // [',' kwargs]
18302
71.7k
        )
18303
33.7k
        {
18304
33.7k
            D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]"));
18305
33.7k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18306
33.7k
            if (_token == NULL) {
18307
0
                p->level--;
18308
0
                return NULL;
18309
0
            }
18310
33.7k
            int _end_lineno = _token->end_lineno;
18311
33.7k
            UNUSED(_end_lineno); // Only used by EXTRA macro
18312
33.7k
            int _end_col_offset = _token->end_col_offset;
18313
33.7k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
18314
33.7k
            _res = _PyPegen_collect_call_seqs ( p , a , b , EXTRA );
18315
33.7k
            if (_res == NULL && PyErr_Occurred()) {
18316
0
                p->error_indicator = 1;
18317
0
                p->level--;
18318
0
                return NULL;
18319
0
            }
18320
33.7k
            goto done;
18321
33.7k
        }
18322
37.9k
        p->mark = _mark;
18323
37.9k
        D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ',
18324
37.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]"));
18325
37.9k
    }
18326
0
    { // kwargs
18327
37.9k
        if (p->error_indicator) {
18328
838
            p->level--;
18329
838
            return NULL;
18330
838
        }
18331
37.0k
        D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs"));
18332
37.0k
        asdl_seq* a;
18333
37.0k
        if (
18334
37.0k
            (a = kwargs_rule(p))  // kwargs
18335
37.0k
        )
18336
6.20k
        {
18337
6.20k
            D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs"));
18338
6.20k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18339
6.20k
            if (_token == NULL) {
18340
0
                p->level--;
18341
0
                return NULL;
18342
0
            }
18343
6.20k
            int _end_lineno = _token->end_lineno;
18344
6.20k
            UNUSED(_end_lineno); // Only used by EXTRA macro
18345
6.20k
            int _end_col_offset = _token->end_col_offset;
18346
6.20k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
18347
6.20k
            _res = _PyAST_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( asdl_expr_seq* , _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( asdl_keyword_seq* , _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA );
18348
6.20k
            if (_res == NULL && PyErr_Occurred()) {
18349
0
                p->error_indicator = 1;
18350
0
                p->level--;
18351
0
                return NULL;
18352
0
            }
18353
6.20k
            goto done;
18354
6.20k
        }
18355
30.8k
        p->mark = _mark;
18356
30.8k
        D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ',
18357
30.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwargs"));
18358
30.8k
    }
18359
0
    _res = NULL;
18360
70.8k
  done:
18361
70.8k
    p->level--;
18362
70.8k
    return _res;
18363
30.8k
}
18364
18365
// kwargs:
18366
//     | ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+
18367
//     | ','.kwarg_or_starred+
18368
//     | ','.kwarg_or_double_starred+
18369
static asdl_seq*
18370
kwargs_rule(Parser *p)
18371
48.9k
{
18372
48.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18373
0
        _Pypegen_stack_overflow(p);
18374
0
    }
18375
48.9k
    if (p->error_indicator) {
18376
0
        p->level--;
18377
0
        return NULL;
18378
0
    }
18379
48.9k
    asdl_seq* _res = NULL;
18380
48.9k
    int _mark = p->mark;
18381
48.9k
    { // ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+
18382
48.9k
        if (p->error_indicator) {
18383
0
            p->level--;
18384
0
            return NULL;
18385
0
        }
18386
48.9k
        D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+"));
18387
48.9k
        Token * _literal;
18388
48.9k
        asdl_seq * a;
18389
48.9k
        asdl_seq * b;
18390
48.9k
        if (
18391
48.9k
            (a = _gather_91_rule(p))  // ','.kwarg_or_starred+
18392
48.9k
            &&
18393
48.9k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
18394
48.9k
            &&
18395
48.9k
            (b = _gather_93_rule(p))  // ','.kwarg_or_double_starred+
18396
48.9k
        )
18397
375
        {
18398
375
            D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+"));
18399
375
            _res = _PyPegen_join_sequences ( p , a , b );
18400
375
            if (_res == NULL && PyErr_Occurred()) {
18401
0
                p->error_indicator = 1;
18402
0
                p->level--;
18403
0
                return NULL;
18404
0
            }
18405
375
            goto done;
18406
375
        }
18407
48.5k
        p->mark = _mark;
18408
48.5k
        D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ',
18409
48.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+"));
18410
48.5k
    }
18411
0
    { // ','.kwarg_or_starred+
18412
48.5k
        if (p->error_indicator) {
18413
809
            p->level--;
18414
809
            return NULL;
18415
809
        }
18416
47.7k
        D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+"));
18417
47.7k
        asdl_seq * _gather_91_var;
18418
47.7k
        if (
18419
47.7k
            (_gather_91_var = _gather_91_rule(p))  // ','.kwarg_or_starred+
18420
47.7k
        )
18421
7.81k
        {
18422
7.81k
            D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+"));
18423
7.81k
            _res = _gather_91_var;
18424
7.81k
            goto done;
18425
7.81k
        }
18426
39.9k
        p->mark = _mark;
18427
39.9k
        D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ',
18428
39.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_starred+"));
18429
39.9k
    }
18430
0
    { // ','.kwarg_or_double_starred+
18431
39.9k
        if (p->error_indicator) {
18432
0
            p->level--;
18433
0
            return NULL;
18434
0
        }
18435
39.9k
        D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+"));
18436
39.9k
        asdl_seq * _gather_93_var;
18437
39.9k
        if (
18438
39.9k
            (_gather_93_var = _gather_93_rule(p))  // ','.kwarg_or_double_starred+
18439
39.9k
        )
18440
3.05k
        {
18441
3.05k
            D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+"));
18442
3.05k
            _res = _gather_93_var;
18443
3.05k
            goto done;
18444
3.05k
        }
18445
36.8k
        p->mark = _mark;
18446
36.8k
        D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ',
18447
36.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_double_starred+"));
18448
36.8k
    }
18449
0
    _res = NULL;
18450
48.0k
  done:
18451
48.0k
    p->level--;
18452
48.0k
    return _res;
18453
36.8k
}
18454
18455
// starred_expression:
18456
//     | invalid_starred_expression_unpacking
18457
//     | '*' expression
18458
//     | invalid_starred_expression
18459
static expr_ty
18460
starred_expression_rule(Parser *p)
18461
245k
{
18462
245k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18463
0
        _Pypegen_stack_overflow(p);
18464
0
    }
18465
245k
    if (p->error_indicator) {
18466
0
        p->level--;
18467
0
        return NULL;
18468
0
    }
18469
245k
    expr_ty _res = NULL;
18470
245k
    int _mark = p->mark;
18471
245k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
18472
151
        p->error_indicator = 1;
18473
151
        p->level--;
18474
151
        return NULL;
18475
151
    }
18476
245k
    int _start_lineno = p->tokens[_mark]->lineno;
18477
245k
    UNUSED(_start_lineno); // Only used by EXTRA macro
18478
245k
    int _start_col_offset = p->tokens[_mark]->col_offset;
18479
245k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
18480
245k
    if (p->call_invalid_rules) { // invalid_starred_expression_unpacking
18481
170k
        if (p->error_indicator) {
18482
0
            p->level--;
18483
0
            return NULL;
18484
0
        }
18485
170k
        D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression_unpacking"));
18486
170k
        void *invalid_starred_expression_unpacking_var;
18487
170k
        if (
18488
170k
            (invalid_starred_expression_unpacking_var = invalid_starred_expression_unpacking_rule(p))  // invalid_starred_expression_unpacking
18489
170k
        )
18490
0
        {
18491
0
            D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression_unpacking"));
18492
0
            _res = invalid_starred_expression_unpacking_var;
18493
0
            goto done;
18494
0
        }
18495
170k
        p->mark = _mark;
18496
170k
        D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ',
18497
170k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_starred_expression_unpacking"));
18498
170k
    }
18499
245k
    { // '*' expression
18500
245k
        if (p->error_indicator) {
18501
1.09k
            p->level--;
18502
1.09k
            return NULL;
18503
1.09k
        }
18504
243k
        D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression"));
18505
243k
        Token * _literal;
18506
243k
        expr_ty a;
18507
243k
        if (
18508
243k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
18509
243k
            &&
18510
243k
            (a = expression_rule(p))  // expression
18511
243k
        )
18512
13.9k
        {
18513
13.9k
            D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression"));
18514
13.9k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18515
13.9k
            if (_token == NULL) {
18516
0
                p->level--;
18517
0
                return NULL;
18518
0
            }
18519
13.9k
            int _end_lineno = _token->end_lineno;
18520
13.9k
            UNUSED(_end_lineno); // Only used by EXTRA macro
18521
13.9k
            int _end_col_offset = _token->end_col_offset;
18522
13.9k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
18523
13.9k
            _res = _PyAST_Starred ( a , Load , EXTRA );
18524
13.9k
            if (_res == NULL && PyErr_Occurred()) {
18525
0
                p->error_indicator = 1;
18526
0
                p->level--;
18527
0
                return NULL;
18528
0
            }
18529
13.9k
            goto done;
18530
13.9k
        }
18531
230k
        p->mark = _mark;
18532
230k
        D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ',
18533
230k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression"));
18534
230k
    }
18535
230k
    if (p->call_invalid_rules) { // invalid_starred_expression
18536
157k
        if (p->error_indicator) {
18537
0
            p->level--;
18538
0
            return NULL;
18539
0
        }
18540
157k
        D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression"));
18541
157k
        void *invalid_starred_expression_var;
18542
157k
        if (
18543
157k
            (invalid_starred_expression_var = invalid_starred_expression_rule(p))  // invalid_starred_expression
18544
157k
        )
18545
0
        {
18546
0
            D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression"));
18547
0
            _res = invalid_starred_expression_var;
18548
0
            goto done;
18549
0
        }
18550
157k
        p->mark = _mark;
18551
157k
        D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ',
18552
157k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_starred_expression"));
18553
157k
    }
18554
230k
    _res = NULL;
18555
243k
  done:
18556
243k
    p->level--;
18557
243k
    return _res;
18558
230k
}
18559
18560
// kwarg_or_starred: invalid_kwarg | NAME '=' expression | starred_expression
18561
static KeywordOrStarred*
18562
kwarg_or_starred_rule(Parser *p)
18563
112k
{
18564
112k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18565
0
        _Pypegen_stack_overflow(p);
18566
0
    }
18567
112k
    if (p->error_indicator) {
18568
0
        p->level--;
18569
0
        return NULL;
18570
0
    }
18571
112k
    KeywordOrStarred* _res = NULL;
18572
112k
    int _mark = p->mark;
18573
112k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
18574
10
        p->error_indicator = 1;
18575
10
        p->level--;
18576
10
        return NULL;
18577
10
    }
18578
112k
    int _start_lineno = p->tokens[_mark]->lineno;
18579
112k
    UNUSED(_start_lineno); // Only used by EXTRA macro
18580
112k
    int _start_col_offset = p->tokens[_mark]->col_offset;
18581
112k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
18582
112k
    if (p->call_invalid_rules) { // invalid_kwarg
18583
78.6k
        if (p->error_indicator) {
18584
0
            p->level--;
18585
0
            return NULL;
18586
0
        }
18587
78.6k
        D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
18588
78.6k
        void *invalid_kwarg_var;
18589
78.6k
        if (
18590
78.6k
            (invalid_kwarg_var = invalid_kwarg_rule(p))  // invalid_kwarg
18591
78.6k
        )
18592
0
        {
18593
0
            D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
18594
0
            _res = invalid_kwarg_var;
18595
0
            goto done;
18596
0
        }
18597
78.6k
        p->mark = _mark;
18598
78.6k
        D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ',
18599
78.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg"));
18600
78.6k
    }
18601
112k
    { // NAME '=' expression
18602
112k
        if (p->error_indicator) {
18603
581
            p->level--;
18604
581
            return NULL;
18605
581
        }
18606
112k
        D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
18607
112k
        Token * _literal;
18608
112k
        expr_ty a;
18609
112k
        expr_ty b;
18610
112k
        if (
18611
112k
            (a = _PyPegen_name_token(p))  // NAME
18612
112k
            &&
18613
112k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
18614
112k
            &&
18615
112k
            (b = expression_rule(p))  // expression
18616
112k
        )
18617
21.7k
        {
18618
21.7k
            D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
18619
21.7k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18620
21.7k
            if (_token == NULL) {
18621
0
                p->level--;
18622
0
                return NULL;
18623
0
            }
18624
21.7k
            int _end_lineno = _token->end_lineno;
18625
21.7k
            UNUSED(_end_lineno); // Only used by EXTRA macro
18626
21.7k
            int _end_col_offset = _token->end_col_offset;
18627
21.7k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
18628
21.7k
            _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 );
18629
21.7k
            if (_res == NULL && PyErr_Occurred()) {
18630
0
                p->error_indicator = 1;
18631
0
                p->level--;
18632
0
                return NULL;
18633
0
            }
18634
21.7k
            goto done;
18635
21.7k
        }
18636
90.4k
        p->mark = _mark;
18637
90.4k
        D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ',
18638
90.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression"));
18639
90.4k
    }
18640
0
    { // starred_expression
18641
90.4k
        if (p->error_indicator) {
18642
213
            p->level--;
18643
213
            return NULL;
18644
213
        }
18645
90.2k
        D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
18646
90.2k
        expr_ty a;
18647
90.2k
        if (
18648
90.2k
            (a = starred_expression_rule(p))  // starred_expression
18649
90.2k
        )
18650
4.30k
        {
18651
4.30k
            D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression"));
18652
4.30k
            _res = _PyPegen_keyword_or_starred ( p , a , 0 );
18653
4.30k
            if (_res == NULL && PyErr_Occurred()) {
18654
0
                p->error_indicator = 1;
18655
0
                p->level--;
18656
0
                return NULL;
18657
0
            }
18658
4.30k
            goto done;
18659
4.30k
        }
18660
85.9k
        p->mark = _mark;
18661
85.9k
        D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ',
18662
85.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression"));
18663
85.9k
    }
18664
0
    _res = NULL;
18665
112k
  done:
18666
112k
    p->level--;
18667
112k
    return _res;
18668
85.9k
}
18669
18670
// kwarg_or_double_starred: invalid_kwarg | NAME '=' expression | '**' expression
18671
static KeywordOrStarred*
18672
kwarg_or_double_starred_rule(Parser *p)
18673
50.7k
{
18674
50.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18675
0
        _Pypegen_stack_overflow(p);
18676
0
    }
18677
50.7k
    if (p->error_indicator) {
18678
0
        p->level--;
18679
0
        return NULL;
18680
0
    }
18681
50.7k
    KeywordOrStarred* _res = NULL;
18682
50.7k
    int _mark = p->mark;
18683
50.7k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
18684
6
        p->error_indicator = 1;
18685
6
        p->level--;
18686
6
        return NULL;
18687
6
    }
18688
50.7k
    int _start_lineno = p->tokens[_mark]->lineno;
18689
50.7k
    UNUSED(_start_lineno); // Only used by EXTRA macro
18690
50.7k
    int _start_col_offset = p->tokens[_mark]->col_offset;
18691
50.7k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
18692
50.7k
    if (p->call_invalid_rules) { // invalid_kwarg
18693
34.2k
        if (p->error_indicator) {
18694
0
            p->level--;
18695
0
            return NULL;
18696
0
        }
18697
34.2k
        D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
18698
34.2k
        void *invalid_kwarg_var;
18699
34.2k
        if (
18700
34.2k
            (invalid_kwarg_var = invalid_kwarg_rule(p))  // invalid_kwarg
18701
34.2k
        )
18702
0
        {
18703
0
            D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
18704
0
            _res = invalid_kwarg_var;
18705
0
            goto done;
18706
0
        }
18707
34.2k
        p->mark = _mark;
18708
34.2k
        D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ',
18709
34.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg"));
18710
34.2k
    }
18711
50.7k
    { // NAME '=' expression
18712
50.7k
        if (p->error_indicator) {
18713
245
            p->level--;
18714
245
            return NULL;
18715
245
        }
18716
50.4k
        D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
18717
50.4k
        Token * _literal;
18718
50.4k
        expr_ty a;
18719
50.4k
        expr_ty b;
18720
50.4k
        if (
18721
50.4k
            (a = _PyPegen_name_token(p))  // NAME
18722
50.4k
            &&
18723
50.4k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
18724
50.4k
            &&
18725
50.4k
            (b = expression_rule(p))  // expression
18726
50.4k
        )
18727
2.52k
        {
18728
2.52k
            D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
18729
2.52k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18730
2.52k
            if (_token == NULL) {
18731
0
                p->level--;
18732
0
                return NULL;
18733
0
            }
18734
2.52k
            int _end_lineno = _token->end_lineno;
18735
2.52k
            UNUSED(_end_lineno); // Only used by EXTRA macro
18736
2.52k
            int _end_col_offset = _token->end_col_offset;
18737
2.52k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
18738
2.52k
            _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 );
18739
2.52k
            if (_res == NULL && PyErr_Occurred()) {
18740
0
                p->error_indicator = 1;
18741
0
                p->level--;
18742
0
                return NULL;
18743
0
            }
18744
2.52k
            goto done;
18745
2.52k
        }
18746
47.9k
        p->mark = _mark;
18747
47.9k
        D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ',
18748
47.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression"));
18749
47.9k
    }
18750
0
    { // '**' expression
18751
47.9k
        if (p->error_indicator) {
18752
66
            p->level--;
18753
66
            return NULL;
18754
66
        }
18755
47.8k
        D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression"));
18756
47.8k
        Token * _literal;
18757
47.8k
        expr_ty a;
18758
47.8k
        if (
18759
47.8k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
18760
47.8k
            &&
18761
47.8k
            (a = expression_rule(p))  // expression
18762
47.8k
        )
18763
6.93k
        {
18764
6.93k
            D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression"));
18765
6.93k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18766
6.93k
            if (_token == NULL) {
18767
0
                p->level--;
18768
0
                return NULL;
18769
0
            }
18770
6.93k
            int _end_lineno = _token->end_lineno;
18771
6.93k
            UNUSED(_end_lineno); // Only used by EXTRA macro
18772
6.93k
            int _end_col_offset = _token->end_col_offset;
18773
6.93k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
18774
6.93k
            _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( NULL , a , EXTRA ) ) , 1 );
18775
6.93k
            if (_res == NULL && PyErr_Occurred()) {
18776
0
                p->error_indicator = 1;
18777
0
                p->level--;
18778
0
                return NULL;
18779
0
            }
18780
6.93k
            goto done;
18781
6.93k
        }
18782
40.9k
        p->mark = _mark;
18783
40.9k
        D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ',
18784
40.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression"));
18785
40.9k
    }
18786
0
    _res = NULL;
18787
50.4k
  done:
18788
50.4k
    p->level--;
18789
50.4k
    return _res;
18790
40.9k
}
18791
18792
// star_targets: star_target !',' | star_target ((',' star_target))* ','?
18793
static expr_ty
18794
star_targets_rule(Parser *p)
18795
269k
{
18796
269k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18797
0
        _Pypegen_stack_overflow(p);
18798
0
    }
18799
269k
    if (p->error_indicator) {
18800
0
        p->level--;
18801
0
        return NULL;
18802
0
    }
18803
269k
    expr_ty _res = NULL;
18804
269k
    int _mark = p->mark;
18805
269k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
18806
39
        p->error_indicator = 1;
18807
39
        p->level--;
18808
39
        return NULL;
18809
39
    }
18810
269k
    int _start_lineno = p->tokens[_mark]->lineno;
18811
269k
    UNUSED(_start_lineno); // Only used by EXTRA macro
18812
269k
    int _start_col_offset = p->tokens[_mark]->col_offset;
18813
269k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
18814
269k
    { // star_target !','
18815
269k
        if (p->error_indicator) {
18816
0
            p->level--;
18817
0
            return NULL;
18818
0
        }
18819
269k
        D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target !','"));
18820
269k
        expr_ty a;
18821
269k
        if (
18822
269k
            (a = star_target_rule(p))  // star_target
18823
269k
            &&
18824
269k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12)  // token=','
18825
269k
        )
18826
125k
        {
18827
125k
            D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target !','"));
18828
125k
            _res = a;
18829
125k
            if (_res == NULL && PyErr_Occurred()) {
18830
0
                p->error_indicator = 1;
18831
0
                p->level--;
18832
0
                return NULL;
18833
0
            }
18834
125k
            goto done;
18835
125k
        }
18836
143k
        p->mark = _mark;
18837
143k
        D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ',
18838
143k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target !','"));
18839
143k
    }
18840
0
    { // star_target ((',' star_target))* ','?
18841
143k
        if (p->error_indicator) {
18842
1.23k
            p->level--;
18843
1.23k
            return NULL;
18844
1.23k
        }
18845
141k
        D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?"));
18846
141k
        void *_opt_var;
18847
141k
        UNUSED(_opt_var); // Silence compiler warnings
18848
141k
        expr_ty a;
18849
141k
        asdl_seq * b;
18850
141k
        if (
18851
141k
            (a = star_target_rule(p))  // star_target
18852
141k
            &&
18853
141k
            (b = _loop0_94_rule(p))  // ((',' star_target))*
18854
141k
            &&
18855
141k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
18856
141k
        )
18857
14.4k
        {
18858
14.4k
            D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?"));
18859
14.4k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18860
14.4k
            if (_token == NULL) {
18861
0
                p->level--;
18862
0
                return NULL;
18863
0
            }
18864
14.4k
            int _end_lineno = _token->end_lineno;
18865
14.4k
            UNUSED(_end_lineno); // Only used by EXTRA macro
18866
14.4k
            int _end_col_offset = _token->end_col_offset;
18867
14.4k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
18868
14.4k
            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Store , EXTRA );
18869
14.4k
            if (_res == NULL && PyErr_Occurred()) {
18870
0
                p->error_indicator = 1;
18871
0
                p->level--;
18872
0
                return NULL;
18873
0
            }
18874
14.4k
            goto done;
18875
14.4k
        }
18876
127k
        p->mark = _mark;
18877
127k
        D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ',
18878
127k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ((',' star_target))* ','?"));
18879
127k
    }
18880
0
    _res = NULL;
18881
267k
  done:
18882
267k
    p->level--;
18883
267k
    return _res;
18884
127k
}
18885
18886
// star_targets_list_seq: ','.star_target+ ','?
18887
static asdl_expr_seq*
18888
star_targets_list_seq_rule(Parser *p)
18889
9.17k
{
18890
9.17k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18891
0
        _Pypegen_stack_overflow(p);
18892
0
    }
18893
9.17k
    if (p->error_indicator) {
18894
0
        p->level--;
18895
0
        return NULL;
18896
0
    }
18897
9.17k
    asdl_expr_seq* _res = NULL;
18898
9.17k
    int _mark = p->mark;
18899
9.17k
    { // ','.star_target+ ','?
18900
9.17k
        if (p->error_indicator) {
18901
0
            p->level--;
18902
0
            return NULL;
18903
0
        }
18904
9.17k
        D(fprintf(stderr, "%*c> star_targets_list_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.star_target+ ','?"));
18905
9.17k
        void *_opt_var;
18906
9.17k
        UNUSED(_opt_var); // Silence compiler warnings
18907
9.17k
        asdl_expr_seq* a;
18908
9.17k
        if (
18909
9.17k
            (a = (asdl_expr_seq*)_gather_96_rule(p))  // ','.star_target+
18910
9.17k
            &&
18911
9.17k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
18912
9.17k
        )
18913
2.31k
        {
18914
2.31k
            D(fprintf(stderr, "%*c+ star_targets_list_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.star_target+ ','?"));
18915
2.31k
            _res = a;
18916
2.31k
            if (_res == NULL && PyErr_Occurred()) {
18917
0
                p->error_indicator = 1;
18918
0
                p->level--;
18919
0
                return NULL;
18920
0
            }
18921
2.31k
            goto done;
18922
2.31k
        }
18923
6.85k
        p->mark = _mark;
18924
6.85k
        D(fprintf(stderr, "%*c%s star_targets_list_seq[%d-%d]: %s failed!\n", p->level, ' ',
18925
6.85k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.star_target+ ','?"));
18926
6.85k
    }
18927
0
    _res = NULL;
18928
9.17k
  done:
18929
9.17k
    p->level--;
18930
9.17k
    return _res;
18931
6.85k
}
18932
18933
// star_targets_tuple_seq: star_target ((',' star_target))+ ','? | star_target ','
18934
static asdl_expr_seq*
18935
star_targets_tuple_seq_rule(Parser *p)
18936
8.39k
{
18937
8.39k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
18938
0
        _Pypegen_stack_overflow(p);
18939
0
    }
18940
8.39k
    if (p->error_indicator) {
18941
0
        p->level--;
18942
0
        return NULL;
18943
0
    }
18944
8.39k
    asdl_expr_seq* _res = NULL;
18945
8.39k
    int _mark = p->mark;
18946
8.39k
    { // star_target ((',' star_target))+ ','?
18947
8.39k
        if (p->error_indicator) {
18948
0
            p->level--;
18949
0
            return NULL;
18950
0
        }
18951
8.39k
        D(fprintf(stderr, "%*c> star_targets_tuple_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))+ ','?"));
18952
8.39k
        void *_opt_var;
18953
8.39k
        UNUSED(_opt_var); // Silence compiler warnings
18954
8.39k
        expr_ty a;
18955
8.39k
        asdl_seq * b;
18956
8.39k
        if (
18957
8.39k
            (a = star_target_rule(p))  // star_target
18958
8.39k
            &&
18959
8.39k
            (b = _loop1_97_rule(p))  // ((',' star_target))+
18960
8.39k
            &&
18961
8.39k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
18962
8.39k
        )
18963
409
        {
18964
409
            D(fprintf(stderr, "%*c+ star_targets_tuple_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))+ ','?"));
18965
409
            _res = ( asdl_expr_seq* ) _PyPegen_seq_insert_in_front ( p , a , b );
18966
409
            if (_res == NULL && PyErr_Occurred()) {
18967
0
                p->error_indicator = 1;
18968
0
                p->level--;
18969
0
                return NULL;
18970
0
            }
18971
409
            goto done;
18972
409
        }
18973
7.98k
        p->mark = _mark;
18974
7.98k
        D(fprintf(stderr, "%*c%s star_targets_tuple_seq[%d-%d]: %s failed!\n", p->level, ' ',
18975
7.98k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ((',' star_target))+ ','?"));
18976
7.98k
    }
18977
0
    { // star_target ','
18978
7.98k
        if (p->error_indicator) {
18979
0
            p->level--;
18980
0
            return NULL;
18981
0
        }
18982
7.98k
        D(fprintf(stderr, "%*c> star_targets_tuple_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ','"));
18983
7.98k
        Token * _literal;
18984
7.98k
        expr_ty a;
18985
7.98k
        if (
18986
7.98k
            (a = star_target_rule(p))  // star_target
18987
7.98k
            &&
18988
7.98k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
18989
7.98k
        )
18990
963
        {
18991
963
            D(fprintf(stderr, "%*c+ star_targets_tuple_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ','"));
18992
963
            _res = ( asdl_expr_seq* ) _PyPegen_singleton_seq ( p , a );
18993
963
            if (_res == NULL && PyErr_Occurred()) {
18994
0
                p->error_indicator = 1;
18995
0
                p->level--;
18996
0
                return NULL;
18997
0
            }
18998
963
            goto done;
18999
963
        }
19000
7.02k
        p->mark = _mark;
19001
7.02k
        D(fprintf(stderr, "%*c%s star_targets_tuple_seq[%d-%d]: %s failed!\n", p->level, ' ',
19002
7.02k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ','"));
19003
7.02k
    }
19004
0
    _res = NULL;
19005
8.39k
  done:
19006
8.39k
    p->level--;
19007
8.39k
    return _res;
19008
7.02k
}
19009
19010
// star_target: '*' (!'*' star_target) | target_with_star_atom
19011
static expr_ty
19012
star_target_rule(Parser *p)
19013
465k
{
19014
465k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
19015
0
        _Pypegen_stack_overflow(p);
19016
0
    }
19017
465k
    if (p->error_indicator) {
19018
12
        p->level--;
19019
12
        return NULL;
19020
12
    }
19021
465k
    expr_ty _res = NULL;
19022
465k
    if (_PyPegen_is_memoized(p, star_target_type, &_res)) {
19023
233k
        p->level--;
19024
233k
        return _res;
19025
233k
    }
19026
232k
    int _mark = p->mark;
19027
232k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
19028
0
        p->error_indicator = 1;
19029
0
        p->level--;
19030
0
        return NULL;
19031
0
    }
19032
232k
    int _start_lineno = p->tokens[_mark]->lineno;
19033
232k
    UNUSED(_start_lineno); // Only used by EXTRA macro
19034
232k
    int _start_col_offset = p->tokens[_mark]->col_offset;
19035
232k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
19036
232k
    { // '*' (!'*' star_target)
19037
232k
        if (p->error_indicator) {
19038
0
            p->level--;
19039
0
            return NULL;
19040
0
        }
19041
232k
        D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)"));
19042
232k
        Token * _literal;
19043
232k
        void *a;
19044
232k
        if (
19045
232k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
19046
232k
            &&
19047
232k
            (a = _tmp_98_rule(p))  // !'*' star_target
19048
232k
        )
19049
1.56k
        {
19050
1.56k
            D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)"));
19051
1.56k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19052
1.56k
            if (_token == NULL) {
19053
0
                p->level--;
19054
0
                return NULL;
19055
0
            }
19056
1.56k
            int _end_lineno = _token->end_lineno;
19057
1.56k
            UNUSED(_end_lineno); // Only used by EXTRA macro
19058
1.56k
            int _end_col_offset = _token->end_col_offset;
19059
1.56k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19060
1.56k
            _res = _PyAST_Starred ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , Store , EXTRA );
19061
1.56k
            if (_res == NULL && PyErr_Occurred()) {
19062
0
                p->error_indicator = 1;
19063
0
                p->level--;
19064
0
                return NULL;
19065
0
            }
19066
1.56k
            goto done;
19067
1.56k
        }
19068
230k
        p->mark = _mark;
19069
230k
        D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ',
19070
230k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (!'*' star_target)"));
19071
230k
    }
19072
0
    { // target_with_star_atom
19073
230k
        if (p->error_indicator) {
19074
391
            p->level--;
19075
391
            return NULL;
19076
391
        }
19077
230k
        D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target_with_star_atom"));
19078
230k
        expr_ty target_with_star_atom_var;
19079
230k
        if (
19080
230k
            (target_with_star_atom_var = target_with_star_atom_rule(p))  // target_with_star_atom
19081
230k
        )
19082
112k
        {
19083
112k
            D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "target_with_star_atom"));
19084
112k
            _res = target_with_star_atom_var;
19085
112k
            goto done;
19086
112k
        }
19087
117k
        p->mark = _mark;
19088
117k
        D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ',
19089
117k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "target_with_star_atom"));
19090
117k
    }
19091
0
    _res = NULL;
19092
231k
  done:
19093
231k
    _PyPegen_insert_memo(p, _mark, star_target_type, _res);
19094
231k
    p->level--;
19095
231k
    return _res;
19096
117k
}
19097
19098
// target_with_star_atom:
19099
//     | t_primary '.' NAME !t_lookahead
19100
//     | t_primary '[' slices ']' !t_lookahead
19101
//     | star_atom
19102
static expr_ty
19103
target_with_star_atom_rule(Parser *p)
19104
239k
{
19105
239k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
19106
0
        _Pypegen_stack_overflow(p);
19107
0
    }
19108
239k
    if (p->error_indicator) {
19109
0
        p->level--;
19110
0
        return NULL;
19111
0
    }
19112
239k
    expr_ty _res = NULL;
19113
239k
    if (_PyPegen_is_memoized(p, target_with_star_atom_type, &_res)) {
19114
8.31k
        p->level--;
19115
8.31k
        return _res;
19116
8.31k
    }
19117
231k
    int _mark = p->mark;
19118
231k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
19119
0
        p->error_indicator = 1;
19120
0
        p->level--;
19121
0
        return NULL;
19122
0
    }
19123
231k
    int _start_lineno = p->tokens[_mark]->lineno;
19124
231k
    UNUSED(_start_lineno); // Only used by EXTRA macro
19125
231k
    int _start_col_offset = p->tokens[_mark]->col_offset;
19126
231k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
19127
231k
    { // t_primary '.' NAME !t_lookahead
19128
231k
        if (p->error_indicator) {
19129
0
            p->level--;
19130
0
            return NULL;
19131
0
        }
19132
231k
        D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
19133
231k
        Token * _literal;
19134
231k
        expr_ty a;
19135
231k
        expr_ty b;
19136
231k
        if (
19137
231k
            (a = t_primary_rule(p))  // t_primary
19138
231k
            &&
19139
231k
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
19140
231k
            &&
19141
231k
            (b = _PyPegen_name_token(p))  // NAME
19142
231k
            &&
19143
231k
            _PyPegen_lookahead(0, t_lookahead_rule, p)
19144
231k
        )
19145
4.21k
        {
19146
4.21k
            D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
19147
4.21k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19148
4.21k
            if (_token == NULL) {
19149
0
                p->level--;
19150
0
                return NULL;
19151
0
            }
19152
4.21k
            int _end_lineno = _token->end_lineno;
19153
4.21k
            UNUSED(_end_lineno); // Only used by EXTRA macro
19154
4.21k
            int _end_col_offset = _token->end_col_offset;
19155
4.21k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19156
4.21k
            _res = _PyAST_Attribute ( a , b -> v . Name . id , Store , EXTRA );
19157
4.21k
            if (_res == NULL && PyErr_Occurred()) {
19158
0
                p->error_indicator = 1;
19159
0
                p->level--;
19160
0
                return NULL;
19161
0
            }
19162
4.21k
            goto done;
19163
4.21k
        }
19164
227k
        p->mark = _mark;
19165
227k
        D(fprintf(stderr, "%*c%s target_with_star_atom[%d-%d]: %s failed!\n", p->level, ' ',
19166
227k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
19167
227k
    }
19168
0
    { // t_primary '[' slices ']' !t_lookahead
19169
227k
        if (p->error_indicator) {
19170
1.34k
            p->level--;
19171
1.34k
            return NULL;
19172
1.34k
        }
19173
225k
        D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
19174
225k
        Token * _literal;
19175
225k
        Token * _literal_1;
19176
225k
        expr_ty a;
19177
225k
        expr_ty b;
19178
225k
        if (
19179
225k
            (a = t_primary_rule(p))  // t_primary
19180
225k
            &&
19181
225k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
19182
225k
            &&
19183
225k
            (b = slices_rule(p))  // slices
19184
225k
            &&
19185
225k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
19186
225k
            &&
19187
225k
            _PyPegen_lookahead(0, t_lookahead_rule, p)
19188
225k
        )
19189
1.84k
        {
19190
1.84k
            D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
19191
1.84k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19192
1.84k
            if (_token == NULL) {
19193
0
                p->level--;
19194
0
                return NULL;
19195
0
            }
19196
1.84k
            int _end_lineno = _token->end_lineno;
19197
1.84k
            UNUSED(_end_lineno); // Only used by EXTRA macro
19198
1.84k
            int _end_col_offset = _token->end_col_offset;
19199
1.84k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19200
1.84k
            _res = _PyAST_Subscript ( a , b , Store , EXTRA );
19201
1.84k
            if (_res == NULL && PyErr_Occurred()) {
19202
0
                p->error_indicator = 1;
19203
0
                p->level--;
19204
0
                return NULL;
19205
0
            }
19206
1.84k
            goto done;
19207
1.84k
        }
19208
224k
        p->mark = _mark;
19209
224k
        D(fprintf(stderr, "%*c%s target_with_star_atom[%d-%d]: %s failed!\n", p->level, ' ',
19210
224k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
19211
224k
    }
19212
0
    { // star_atom
19213
224k
        if (p->error_indicator) {
19214
0
            p->level--;
19215
0
            return NULL;
19216
0
        }
19217
224k
        D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_atom"));
19218
224k
        expr_ty star_atom_var;
19219
224k
        if (
19220
224k
            (star_atom_var = star_atom_rule(p))  // star_atom
19221
224k
        )
19222
107k
        {
19223
107k
            D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_atom"));
19224
107k
            _res = star_atom_var;
19225
107k
            goto done;
19226
107k
        }
19227
116k
        p->mark = _mark;
19228
116k
        D(fprintf(stderr, "%*c%s target_with_star_atom[%d-%d]: %s failed!\n", p->level, ' ',
19229
116k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_atom"));
19230
116k
    }
19231
0
    _res = NULL;
19232
230k
  done:
19233
230k
    _PyPegen_insert_memo(p, _mark, target_with_star_atom_type, _res);
19234
230k
    p->level--;
19235
230k
    return _res;
19236
116k
}
19237
19238
// star_atom:
19239
//     | NAME
19240
//     | '(' target_with_star_atom ')'
19241
//     | '(' star_targets_tuple_seq? ')'
19242
//     | '[' star_targets_list_seq? ']'
19243
static expr_ty
19244
star_atom_rule(Parser *p)
19245
224k
{
19246
224k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
19247
0
        _Pypegen_stack_overflow(p);
19248
0
    }
19249
224k
    if (p->error_indicator) {
19250
0
        p->level--;
19251
0
        return NULL;
19252
0
    }
19253
224k
    expr_ty _res = NULL;
19254
224k
    int _mark = p->mark;
19255
224k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
19256
0
        p->error_indicator = 1;
19257
0
        p->level--;
19258
0
        return NULL;
19259
0
    }
19260
224k
    int _start_lineno = p->tokens[_mark]->lineno;
19261
224k
    UNUSED(_start_lineno); // Only used by EXTRA macro
19262
224k
    int _start_col_offset = p->tokens[_mark]->col_offset;
19263
224k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
19264
224k
    { // NAME
19265
224k
        if (p->error_indicator) {
19266
0
            p->level--;
19267
0
            return NULL;
19268
0
        }
19269
224k
        D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
19270
224k
        expr_ty a;
19271
224k
        if (
19272
224k
            (a = _PyPegen_name_token(p))  // NAME
19273
224k
        )
19274
100k
        {
19275
100k
            D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
19276
100k
            _res = _PyPegen_set_expr_context ( p , a , Store );
19277
100k
            if (_res == NULL && PyErr_Occurred()) {
19278
0
                p->error_indicator = 1;
19279
0
                p->level--;
19280
0
                return NULL;
19281
0
            }
19282
100k
            goto done;
19283
100k
        }
19284
123k
        p->mark = _mark;
19285
123k
        D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ',
19286
123k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
19287
123k
    }
19288
0
    { // '(' target_with_star_atom ')'
19289
123k
        if (p->error_indicator) {
19290
0
            p->level--;
19291
0
            return NULL;
19292
0
        }
19293
123k
        D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' target_with_star_atom ')'"));
19294
123k
        Token * _literal;
19295
123k
        Token * _literal_1;
19296
123k
        expr_ty a;
19297
123k
        if (
19298
123k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
19299
123k
            &&
19300
123k
            (a = target_with_star_atom_rule(p))  // target_with_star_atom
19301
123k
            &&
19302
123k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
19303
123k
        )
19304
1.05k
        {
19305
1.05k
            D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' target_with_star_atom ')'"));
19306
1.05k
            _res = _PyPegen_set_expr_context ( p , a , Store );
19307
1.05k
            if (_res == NULL && PyErr_Occurred()) {
19308
0
                p->error_indicator = 1;
19309
0
                p->level--;
19310
0
                return NULL;
19311
0
            }
19312
1.05k
            goto done;
19313
1.05k
        }
19314
122k
        p->mark = _mark;
19315
122k
        D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ',
19316
122k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' target_with_star_atom ')'"));
19317
122k
    }
19318
0
    { // '(' star_targets_tuple_seq? ')'
19319
122k
        if (p->error_indicator) {
19320
0
            p->level--;
19321
0
            return NULL;
19322
0
        }
19323
122k
        D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' star_targets_tuple_seq? ')'"));
19324
122k
        Token * _literal;
19325
122k
        Token * _literal_1;
19326
122k
        void *a;
19327
122k
        if (
19328
122k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
19329
122k
            &&
19330
122k
            (a = star_targets_tuple_seq_rule(p), !p->error_indicator)  // star_targets_tuple_seq?
19331
122k
            &&
19332
122k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
19333
122k
        )
19334
3.69k
        {
19335
3.69k
            D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' star_targets_tuple_seq? ')'"));
19336
3.69k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19337
3.69k
            if (_token == NULL) {
19338
0
                p->level--;
19339
0
                return NULL;
19340
0
            }
19341
3.69k
            int _end_lineno = _token->end_lineno;
19342
3.69k
            UNUSED(_end_lineno); // Only used by EXTRA macro
19343
3.69k
            int _end_col_offset = _token->end_col_offset;
19344
3.69k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19345
3.69k
            _res = _PyAST_Tuple ( a , Store , EXTRA );
19346
3.69k
            if (_res == NULL && PyErr_Occurred()) {
19347
0
                p->error_indicator = 1;
19348
0
                p->level--;
19349
0
                return NULL;
19350
0
            }
19351
3.69k
            goto done;
19352
3.69k
        }
19353
118k
        p->mark = _mark;
19354
118k
        D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ',
19355
118k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' star_targets_tuple_seq? ')'"));
19356
118k
    }
19357
0
    { // '[' star_targets_list_seq? ']'
19358
118k
        if (p->error_indicator) {
19359
0
            p->level--;
19360
0
            return NULL;
19361
0
        }
19362
118k
        D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_targets_list_seq? ']'"));
19363
118k
        Token * _literal;
19364
118k
        Token * _literal_1;
19365
118k
        void *a;
19366
118k
        if (
19367
118k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
19368
118k
            &&
19369
118k
            (a = star_targets_list_seq_rule(p), !p->error_indicator)  // star_targets_list_seq?
19370
118k
            &&
19371
118k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
19372
118k
        )
19373
2.33k
        {
19374
2.33k
            D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_targets_list_seq? ']'"));
19375
2.33k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19376
2.33k
            if (_token == NULL) {
19377
0
                p->level--;
19378
0
                return NULL;
19379
0
            }
19380
2.33k
            int _end_lineno = _token->end_lineno;
19381
2.33k
            UNUSED(_end_lineno); // Only used by EXTRA macro
19382
2.33k
            int _end_col_offset = _token->end_col_offset;
19383
2.33k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19384
2.33k
            _res = _PyAST_List ( a , Store , EXTRA );
19385
2.33k
            if (_res == NULL && PyErr_Occurred()) {
19386
0
                p->error_indicator = 1;
19387
0
                p->level--;
19388
0
                return NULL;
19389
0
            }
19390
2.33k
            goto done;
19391
2.33k
        }
19392
116k
        p->mark = _mark;
19393
116k
        D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ',
19394
116k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' star_targets_list_seq? ']'"));
19395
116k
    }
19396
0
    _res = NULL;
19397
224k
  done:
19398
224k
    p->level--;
19399
224k
    return _res;
19400
116k
}
19401
19402
// single_target: single_subscript_attribute_target | NAME | '(' single_target ')'
19403
static expr_ty
19404
single_target_rule(Parser *p)
19405
163k
{
19406
163k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
19407
0
        _Pypegen_stack_overflow(p);
19408
0
    }
19409
163k
    if (p->error_indicator) {
19410
0
        p->level--;
19411
0
        return NULL;
19412
0
    }
19413
163k
    expr_ty _res = NULL;
19414
163k
    int _mark = p->mark;
19415
163k
    { // single_subscript_attribute_target
19416
163k
        if (p->error_indicator) {
19417
0
            p->level--;
19418
0
            return NULL;
19419
0
        }
19420
163k
        D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
19421
163k
        expr_ty single_subscript_attribute_target_var;
19422
163k
        if (
19423
163k
            (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p))  // single_subscript_attribute_target
19424
163k
        )
19425
1.72k
        {
19426
1.72k
            D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
19427
1.72k
            _res = single_subscript_attribute_target_var;
19428
1.72k
            goto done;
19429
1.72k
        }
19430
161k
        p->mark = _mark;
19431
161k
        D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ',
19432
161k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target"));
19433
161k
    }
19434
0
    { // NAME
19435
161k
        if (p->error_indicator) {
19436
155
            p->level--;
19437
155
            return NULL;
19438
155
        }
19439
161k
        D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
19440
161k
        expr_ty a;
19441
161k
        if (
19442
161k
            (a = _PyPegen_name_token(p))  // NAME
19443
161k
        )
19444
66.4k
        {
19445
66.4k
            D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
19446
66.4k
            _res = _PyPegen_set_expr_context ( p , a , Store );
19447
66.4k
            if (_res == NULL && PyErr_Occurred()) {
19448
0
                p->error_indicator = 1;
19449
0
                p->level--;
19450
0
                return NULL;
19451
0
            }
19452
66.4k
            goto done;
19453
66.4k
        }
19454
95.0k
        p->mark = _mark;
19455
95.0k
        D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ',
19456
95.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
19457
95.0k
    }
19458
0
    { // '(' single_target ')'
19459
95.0k
        if (p->error_indicator) {
19460
0
            p->level--;
19461
0
            return NULL;
19462
0
        }
19463
95.0k
        D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
19464
95.0k
        Token * _literal;
19465
95.0k
        Token * _literal_1;
19466
95.0k
        expr_ty a;
19467
95.0k
        if (
19468
95.0k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
19469
95.0k
            &&
19470
95.0k
            (a = single_target_rule(p))  // single_target
19471
95.0k
            &&
19472
95.0k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
19473
95.0k
        )
19474
457
        {
19475
457
            D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
19476
457
            _res = a;
19477
457
            if (_res == NULL && PyErr_Occurred()) {
19478
0
                p->error_indicator = 1;
19479
0
                p->level--;
19480
0
                return NULL;
19481
0
            }
19482
457
            goto done;
19483
457
        }
19484
94.5k
        p->mark = _mark;
19485
94.5k
        D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ',
19486
94.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'"));
19487
94.5k
    }
19488
0
    _res = NULL;
19489
163k
  done:
19490
163k
    p->level--;
19491
163k
    return _res;
19492
94.5k
}
19493
19494
// single_subscript_attribute_target:
19495
//     | t_primary '.' NAME !t_lookahead
19496
//     | t_primary '[' slices ']' !t_lookahead
19497
static expr_ty
19498
single_subscript_attribute_target_rule(Parser *p)
19499
333k
{
19500
333k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
19501
0
        _Pypegen_stack_overflow(p);
19502
0
    }
19503
333k
    if (p->error_indicator) {
19504
0
        p->level--;
19505
0
        return NULL;
19506
0
    }
19507
333k
    expr_ty _res = NULL;
19508
333k
    int _mark = p->mark;
19509
333k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
19510
24
        p->error_indicator = 1;
19511
24
        p->level--;
19512
24
        return NULL;
19513
24
    }
19514
333k
    int _start_lineno = p->tokens[_mark]->lineno;
19515
333k
    UNUSED(_start_lineno); // Only used by EXTRA macro
19516
333k
    int _start_col_offset = p->tokens[_mark]->col_offset;
19517
333k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
19518
333k
    { // t_primary '.' NAME !t_lookahead
19519
333k
        if (p->error_indicator) {
19520
0
            p->level--;
19521
0
            return NULL;
19522
0
        }
19523
333k
        D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
19524
333k
        Token * _literal;
19525
333k
        expr_ty a;
19526
333k
        expr_ty b;
19527
333k
        if (
19528
333k
            (a = t_primary_rule(p))  // t_primary
19529
333k
            &&
19530
333k
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
19531
333k
            &&
19532
333k
            (b = _PyPegen_name_token(p))  // NAME
19533
333k
            &&
19534
333k
            _PyPegen_lookahead(0, t_lookahead_rule, p)
19535
333k
        )
19536
5.49k
        {
19537
5.49k
            D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
19538
5.49k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19539
5.49k
            if (_token == NULL) {
19540
0
                p->level--;
19541
0
                return NULL;
19542
0
            }
19543
5.49k
            int _end_lineno = _token->end_lineno;
19544
5.49k
            UNUSED(_end_lineno); // Only used by EXTRA macro
19545
5.49k
            int _end_col_offset = _token->end_col_offset;
19546
5.49k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19547
5.49k
            _res = _PyAST_Attribute ( a , b -> v . Name . id , Store , EXTRA );
19548
5.49k
            if (_res == NULL && PyErr_Occurred()) {
19549
0
                p->error_indicator = 1;
19550
0
                p->level--;
19551
0
                return NULL;
19552
0
            }
19553
5.49k
            goto done;
19554
5.49k
        }
19555
327k
        p->mark = _mark;
19556
327k
        D(fprintf(stderr, "%*c%s single_subscript_attribute_target[%d-%d]: %s failed!\n", p->level, ' ',
19557
327k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
19558
327k
    }
19559
0
    { // t_primary '[' slices ']' !t_lookahead
19560
327k
        if (p->error_indicator) {
19561
2.58k
            p->level--;
19562
2.58k
            return NULL;
19563
2.58k
        }
19564
325k
        D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
19565
325k
        Token * _literal;
19566
325k
        Token * _literal_1;
19567
325k
        expr_ty a;
19568
325k
        expr_ty b;
19569
325k
        if (
19570
325k
            (a = t_primary_rule(p))  // t_primary
19571
325k
            &&
19572
325k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
19573
325k
            &&
19574
325k
            (b = slices_rule(p))  // slices
19575
325k
            &&
19576
325k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
19577
325k
            &&
19578
325k
            _PyPegen_lookahead(0, t_lookahead_rule, p)
19579
325k
        )
19580
1.01k
        {
19581
1.01k
            D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
19582
1.01k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19583
1.01k
            if (_token == NULL) {
19584
0
                p->level--;
19585
0
                return NULL;
19586
0
            }
19587
1.01k
            int _end_lineno = _token->end_lineno;
19588
1.01k
            UNUSED(_end_lineno); // Only used by EXTRA macro
19589
1.01k
            int _end_col_offset = _token->end_col_offset;
19590
1.01k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19591
1.01k
            _res = _PyAST_Subscript ( a , b , Store , EXTRA );
19592
1.01k
            if (_res == NULL && PyErr_Occurred()) {
19593
0
                p->error_indicator = 1;
19594
0
                p->level--;
19595
0
                return NULL;
19596
0
            }
19597
1.01k
            goto done;
19598
1.01k
        }
19599
324k
        p->mark = _mark;
19600
324k
        D(fprintf(stderr, "%*c%s single_subscript_attribute_target[%d-%d]: %s failed!\n", p->level, ' ',
19601
324k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
19602
324k
    }
19603
0
    _res = NULL;
19604
330k
  done:
19605
330k
    p->level--;
19606
330k
    return _res;
19607
324k
}
19608
19609
// Left-recursive
19610
// t_primary:
19611
//     | t_primary '.' NAME &t_lookahead
19612
//     | t_primary '[' slices ']' &t_lookahead
19613
//     | t_primary genexp &t_lookahead
19614
//     | t_primary '(' arguments? ')' &t_lookahead
19615
//     | atom &t_lookahead
19616
static expr_ty t_primary_raw(Parser *);
19617
static expr_ty
19618
t_primary_rule(Parser *p)
19619
2.22M
{
19620
2.22M
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
19621
0
        _Pypegen_stack_overflow(p);
19622
0
    }
19623
2.22M
    expr_ty _res = NULL;
19624
2.22M
    if (_PyPegen_is_memoized(p, t_primary_type, &_res)) {
19625
1.97M
        p->level--;
19626
1.97M
        return _res;
19627
1.97M
    }
19628
244k
    int _mark = p->mark;
19629
244k
    int _resmark = p->mark;
19630
277k
    while (1) {
19631
277k
        int tmpvar_9 = _PyPegen_update_memo(p, _mark, t_primary_type, _res);
19632
277k
        if (tmpvar_9) {
19633
0
            p->level--;
19634
0
            return _res;
19635
0
        }
19636
277k
        p->mark = _mark;
19637
277k
        void *_raw = t_primary_raw(p);
19638
277k
        if (p->error_indicator) {
19639
4.03k
            p->level--;
19640
4.03k
            return NULL;
19641
4.03k
        }
19642
273k
        if (_raw == NULL || p->mark <= _resmark)
19643
240k
            break;
19644
32.3k
        _resmark = p->mark;
19645
32.3k
        _res = _raw;
19646
32.3k
    }
19647
240k
    p->mark = _resmark;
19648
240k
    p->level--;
19649
240k
    return _res;
19650
244k
}
19651
static expr_ty
19652
t_primary_raw(Parser *p)
19653
277k
{
19654
277k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
19655
0
        _Pypegen_stack_overflow(p);
19656
0
    }
19657
277k
    if (p->error_indicator) {
19658
0
        p->level--;
19659
0
        return NULL;
19660
0
    }
19661
277k
    expr_ty _res = NULL;
19662
277k
    int _mark = p->mark;
19663
277k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
19664
0
        p->error_indicator = 1;
19665
0
        p->level--;
19666
0
        return NULL;
19667
0
    }
19668
277k
    int _start_lineno = p->tokens[_mark]->lineno;
19669
277k
    UNUSED(_start_lineno); // Only used by EXTRA macro
19670
277k
    int _start_col_offset = p->tokens[_mark]->col_offset;
19671
277k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
19672
277k
    { // t_primary '.' NAME &t_lookahead
19673
277k
        if (p->error_indicator) {
19674
0
            p->level--;
19675
0
            return NULL;
19676
0
        }
19677
277k
        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead"));
19678
277k
        Token * _literal;
19679
277k
        expr_ty a;
19680
277k
        expr_ty b;
19681
277k
        if (
19682
277k
            (a = t_primary_rule(p))  // t_primary
19683
277k
            &&
19684
277k
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
19685
277k
            &&
19686
277k
            (b = _PyPegen_name_token(p))  // NAME
19687
277k
            &&
19688
277k
            _PyPegen_lookahead(1, t_lookahead_rule, p)
19689
277k
        )
19690
6.60k
        {
19691
6.60k
            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead"));
19692
6.60k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19693
6.60k
            if (_token == NULL) {
19694
0
                p->level--;
19695
0
                return NULL;
19696
0
            }
19697
6.60k
            int _end_lineno = _token->end_lineno;
19698
6.60k
            UNUSED(_end_lineno); // Only used by EXTRA macro
19699
6.60k
            int _end_col_offset = _token->end_col_offset;
19700
6.60k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19701
6.60k
            _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA );
19702
6.60k
            if (_res == NULL && PyErr_Occurred()) {
19703
0
                p->error_indicator = 1;
19704
0
                p->level--;
19705
0
                return NULL;
19706
0
            }
19707
6.60k
            goto done;
19708
6.60k
        }
19709
270k
        p->mark = _mark;
19710
270k
        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
19711
270k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME &t_lookahead"));
19712
270k
    }
19713
0
    { // t_primary '[' slices ']' &t_lookahead
19714
270k
        if (p->error_indicator) {
19715
17
            p->level--;
19716
17
            return NULL;
19717
17
        }
19718
270k
        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead"));
19719
270k
        Token * _literal;
19720
270k
        Token * _literal_1;
19721
270k
        expr_ty a;
19722
270k
        expr_ty b;
19723
270k
        if (
19724
270k
            (a = t_primary_rule(p))  // t_primary
19725
270k
            &&
19726
270k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
19727
270k
            &&
19728
270k
            (b = slices_rule(p))  // slices
19729
270k
            &&
19730
270k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
19731
270k
            &&
19732
270k
            _PyPegen_lookahead(1, t_lookahead_rule, p)
19733
270k
        )
19734
670
        {
19735
670
            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead"));
19736
670
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19737
670
            if (_token == NULL) {
19738
0
                p->level--;
19739
0
                return NULL;
19740
0
            }
19741
670
            int _end_lineno = _token->end_lineno;
19742
670
            UNUSED(_end_lineno); // Only used by EXTRA macro
19743
670
            int _end_col_offset = _token->end_col_offset;
19744
670
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19745
670
            _res = _PyAST_Subscript ( a , b , Load , EXTRA );
19746
670
            if (_res == NULL && PyErr_Occurred()) {
19747
0
                p->error_indicator = 1;
19748
0
                p->level--;
19749
0
                return NULL;
19750
0
            }
19751
670
            goto done;
19752
670
        }
19753
269k
        p->mark = _mark;
19754
269k
        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
19755
269k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' &t_lookahead"));
19756
269k
    }
19757
0
    { // t_primary genexp &t_lookahead
19758
269k
        if (p->error_indicator) {
19759
256
            p->level--;
19760
256
            return NULL;
19761
256
        }
19762
269k
        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead"));
19763
269k
        expr_ty a;
19764
269k
        expr_ty b;
19765
269k
        if (
19766
269k
            (a = t_primary_rule(p))  // t_primary
19767
269k
            &&
19768
269k
            (b = genexp_rule(p))  // genexp
19769
269k
            &&
19770
269k
            _PyPegen_lookahead(1, t_lookahead_rule, p)
19771
269k
        )
19772
420
        {
19773
420
            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead"));
19774
420
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19775
420
            if (_token == NULL) {
19776
0
                p->level--;
19777
0
                return NULL;
19778
0
            }
19779
420
            int _end_lineno = _token->end_lineno;
19780
420
            UNUSED(_end_lineno); // Only used by EXTRA macro
19781
420
            int _end_col_offset = _token->end_col_offset;
19782
420
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19783
420
            _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq* , ( asdl_expr_seq* ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA );
19784
420
            if (_res == NULL && PyErr_Occurred()) {
19785
0
                p->error_indicator = 1;
19786
0
                p->level--;
19787
0
                return NULL;
19788
0
            }
19789
420
            goto done;
19790
420
        }
19791
269k
        p->mark = _mark;
19792
269k
        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
19793
269k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary genexp &t_lookahead"));
19794
269k
    }
19795
0
    { // t_primary '(' arguments? ')' &t_lookahead
19796
269k
        if (p->error_indicator) {
19797
349
            p->level--;
19798
349
            return NULL;
19799
349
        }
19800
268k
        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead"));
19801
268k
        Token * _literal;
19802
268k
        Token * _literal_1;
19803
268k
        expr_ty a;
19804
268k
        void *b;
19805
268k
        if (
19806
268k
            (a = t_primary_rule(p))  // t_primary
19807
268k
            &&
19808
268k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
19809
268k
            &&
19810
268k
            (b = arguments_rule(p), !p->error_indicator)  // arguments?
19811
268k
            &&
19812
268k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
19813
268k
            &&
19814
268k
            _PyPegen_lookahead(1, t_lookahead_rule, p)
19815
268k
        )
19816
2.65k
        {
19817
2.65k
            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead"));
19818
2.65k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19819
2.65k
            if (_token == NULL) {
19820
0
                p->level--;
19821
0
                return NULL;
19822
0
            }
19823
2.65k
            int _end_lineno = _token->end_lineno;
19824
2.65k
            UNUSED(_end_lineno); // Only used by EXTRA macro
19825
2.65k
            int _end_col_offset = _token->end_col_offset;
19826
2.65k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
19827
2.65k
            _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA );
19828
2.65k
            if (_res == NULL && PyErr_Occurred()) {
19829
0
                p->error_indicator = 1;
19830
0
                p->level--;
19831
0
                return NULL;
19832
0
            }
19833
2.65k
            goto done;
19834
2.65k
        }
19835
266k
        p->mark = _mark;
19836
266k
        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
19837
266k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead"));
19838
266k
    }
19839
0
    { // atom &t_lookahead
19840
266k
        if (p->error_indicator) {
19841
431
            p->level--;
19842
431
            return NULL;
19843
431
        }
19844
265k
        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom &t_lookahead"));
19845
265k
        expr_ty a;
19846
265k
        if (
19847
265k
            (a = atom_rule(p))  // atom
19848
265k
            &&
19849
265k
            _PyPegen_lookahead(1, t_lookahead_rule, p)
19850
265k
        )
19851
42.8k
        {
19852
42.8k
            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "atom &t_lookahead"));
19853
42.8k
            _res = a;
19854
42.8k
            if (_res == NULL && PyErr_Occurred()) {
19855
0
                p->error_indicator = 1;
19856
0
                p->level--;
19857
0
                return NULL;
19858
0
            }
19859
42.8k
            goto done;
19860
42.8k
        }
19861
223k
        p->mark = _mark;
19862
223k
        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
19863
223k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "atom &t_lookahead"));
19864
223k
    }
19865
0
    _res = NULL;
19866
276k
  done:
19867
276k
    p->level--;
19868
276k
    return _res;
19869
223k
}
19870
19871
// t_lookahead: '(' | '[' | '.'
19872
static void *
19873
t_lookahead_rule(Parser *p)
19874
216k
{
19875
216k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
19876
0
        _Pypegen_stack_overflow(p);
19877
0
    }
19878
216k
    if (p->error_indicator) {
19879
0
        p->level--;
19880
0
        return NULL;
19881
0
    }
19882
216k
    void * _res = NULL;
19883
216k
    int _mark = p->mark;
19884
216k
    { // '('
19885
216k
        if (p->error_indicator) {
19886
0
            p->level--;
19887
0
            return NULL;
19888
0
        }
19889
216k
        D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
19890
216k
        Token * _literal;
19891
216k
        if (
19892
216k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
19893
216k
        )
19894
24.4k
        {
19895
24.4k
            D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('"));
19896
24.4k
            _res = _literal;
19897
24.4k
            goto done;
19898
24.4k
        }
19899
191k
        p->mark = _mark;
19900
191k
        D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ',
19901
191k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('"));
19902
191k
    }
19903
0
    { // '['
19904
191k
        if (p->error_indicator) {
19905
222
            p->level--;
19906
222
            return NULL;
19907
222
        }
19908
191k
        D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
19909
191k
        Token * _literal;
19910
191k
        if (
19911
191k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
19912
191k
        )
19913
6.18k
        {
19914
6.18k
            D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['"));
19915
6.18k
            _res = _literal;
19916
6.18k
            goto done;
19917
6.18k
        }
19918
185k
        p->mark = _mark;
19919
185k
        D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ',
19920
185k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['"));
19921
185k
    }
19922
0
    { // '.'
19923
185k
        if (p->error_indicator) {
19924
0
            p->level--;
19925
0
            return NULL;
19926
0
        }
19927
185k
        D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
19928
185k
        Token * _literal;
19929
185k
        if (
19930
185k
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
19931
185k
        )
19932
22.5k
        {
19933
22.5k
            D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'"));
19934
22.5k
            _res = _literal;
19935
22.5k
            goto done;
19936
22.5k
        }
19937
162k
        p->mark = _mark;
19938
162k
        D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ',
19939
162k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'"));
19940
162k
    }
19941
0
    _res = NULL;
19942
215k
  done:
19943
215k
    p->level--;
19944
215k
    return _res;
19945
162k
}
19946
19947
// del_targets: ','.del_target+ ','?
19948
static asdl_expr_seq*
19949
del_targets_rule(Parser *p)
19950
5.00k
{
19951
5.00k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
19952
0
        _Pypegen_stack_overflow(p);
19953
0
    }
19954
5.00k
    if (p->error_indicator) {
19955
0
        p->level--;
19956
0
        return NULL;
19957
0
    }
19958
5.00k
    asdl_expr_seq* _res = NULL;
19959
5.00k
    int _mark = p->mark;
19960
5.00k
    { // ','.del_target+ ','?
19961
5.00k
        if (p->error_indicator) {
19962
0
            p->level--;
19963
0
            return NULL;
19964
0
        }
19965
5.00k
        D(fprintf(stderr, "%*c> del_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.del_target+ ','?"));
19966
5.00k
        void *_opt_var;
19967
5.00k
        UNUSED(_opt_var); // Silence compiler warnings
19968
5.00k
        asdl_expr_seq* a;
19969
5.00k
        if (
19970
5.00k
            (a = (asdl_expr_seq*)_gather_100_rule(p))  // ','.del_target+
19971
5.00k
            &&
19972
5.00k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
19973
5.00k
        )
19974
2.28k
        {
19975
2.28k
            D(fprintf(stderr, "%*c+ del_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.del_target+ ','?"));
19976
2.28k
            _res = a;
19977
2.28k
            if (_res == NULL && PyErr_Occurred()) {
19978
0
                p->error_indicator = 1;
19979
0
                p->level--;
19980
0
                return NULL;
19981
0
            }
19982
2.28k
            goto done;
19983
2.28k
        }
19984
2.72k
        p->mark = _mark;
19985
2.72k
        D(fprintf(stderr, "%*c%s del_targets[%d-%d]: %s failed!\n", p->level, ' ',
19986
2.72k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.del_target+ ','?"));
19987
2.72k
    }
19988
0
    _res = NULL;
19989
5.00k
  done:
19990
5.00k
    p->level--;
19991
5.00k
    return _res;
19992
2.72k
}
19993
19994
// del_target:
19995
//     | t_primary '.' NAME !t_lookahead
19996
//     | t_primary '[' slices ']' !t_lookahead
19997
//     | del_t_atom
19998
static expr_ty
19999
del_target_rule(Parser *p)
20000
12.1k
{
20001
12.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
20002
0
        _Pypegen_stack_overflow(p);
20003
0
    }
20004
12.1k
    if (p->error_indicator) {
20005
0
        p->level--;
20006
0
        return NULL;
20007
0
    }
20008
12.1k
    expr_ty _res = NULL;
20009
12.1k
    if (_PyPegen_is_memoized(p, del_target_type, &_res)) {
20010
2.75k
        p->level--;
20011
2.75k
        return _res;
20012
2.75k
    }
20013
9.38k
    int _mark = p->mark;
20014
9.38k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
20015
0
        p->error_indicator = 1;
20016
0
        p->level--;
20017
0
        return NULL;
20018
0
    }
20019
9.38k
    int _start_lineno = p->tokens[_mark]->lineno;
20020
9.38k
    UNUSED(_start_lineno); // Only used by EXTRA macro
20021
9.38k
    int _start_col_offset = p->tokens[_mark]->col_offset;
20022
9.38k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
20023
9.38k
    { // t_primary '.' NAME !t_lookahead
20024
9.38k
        if (p->error_indicator) {
20025
0
            p->level--;
20026
0
            return NULL;
20027
0
        }
20028
9.38k
        D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
20029
9.38k
        Token * _literal;
20030
9.38k
        expr_ty a;
20031
9.38k
        expr_ty b;
20032
9.38k
        if (
20033
9.38k
            (a = t_primary_rule(p))  // t_primary
20034
9.38k
            &&
20035
9.38k
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
20036
9.38k
            &&
20037
9.38k
            (b = _PyPegen_name_token(p))  // NAME
20038
9.38k
            &&
20039
9.38k
            _PyPegen_lookahead(0, t_lookahead_rule, p)
20040
9.38k
        )
20041
91
        {
20042
91
            D(fprintf(stderr, "%*c+ del_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
20043
91
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
20044
91
            if (_token == NULL) {
20045
0
                p->level--;
20046
0
                return NULL;
20047
0
            }
20048
91
            int _end_lineno = _token->end_lineno;
20049
91
            UNUSED(_end_lineno); // Only used by EXTRA macro
20050
91
            int _end_col_offset = _token->end_col_offset;
20051
91
            UNUSED(_end_col_offset); // Only used by EXTRA macro
20052
91
            _res = _PyAST_Attribute ( a , b -> v . Name . id , Del , EXTRA );
20053
91
            if (_res == NULL && PyErr_Occurred()) {
20054
0
                p->error_indicator = 1;
20055
0
                p->level--;
20056
0
                return NULL;
20057
0
            }
20058
91
            goto done;
20059
91
        }
20060
9.29k
        p->mark = _mark;
20061
9.29k
        D(fprintf(stderr, "%*c%s del_target[%d-%d]: %s failed!\n", p->level, ' ',
20062
9.29k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
20063
9.29k
    }
20064
0
    { // t_primary '[' slices ']' !t_lookahead
20065
9.29k
        if (p->error_indicator) {
20066
111
            p->level--;
20067
111
            return NULL;
20068
111
        }
20069
9.18k
        D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
20070
9.18k
        Token * _literal;
20071
9.18k
        Token * _literal_1;
20072
9.18k
        expr_ty a;
20073
9.18k
        expr_ty b;
20074
9.18k
        if (
20075
9.18k
            (a = t_primary_rule(p))  // t_primary
20076
9.18k
            &&
20077
9.18k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
20078
9.18k
            &&
20079
9.18k
            (b = slices_rule(p))  // slices
20080
9.18k
            &&
20081
9.18k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
20082
9.18k
            &&
20083
9.18k
            _PyPegen_lookahead(0, t_lookahead_rule, p)
20084
9.18k
        )
20085
137
        {
20086
137
            D(fprintf(stderr, "%*c+ del_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
20087
137
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
20088
137
            if (_token == NULL) {
20089
0
                p->level--;
20090
0
                return NULL;
20091
0
            }
20092
137
            int _end_lineno = _token->end_lineno;
20093
137
            UNUSED(_end_lineno); // Only used by EXTRA macro
20094
137
            int _end_col_offset = _token->end_col_offset;
20095
137
            UNUSED(_end_col_offset); // Only used by EXTRA macro
20096
137
            _res = _PyAST_Subscript ( a , b , Del , EXTRA );
20097
137
            if (_res == NULL && PyErr_Occurred()) {
20098
0
                p->error_indicator = 1;
20099
0
                p->level--;
20100
0
                return NULL;
20101
0
            }
20102
137
            goto done;
20103
137
        }
20104
9.04k
        p->mark = _mark;
20105
9.04k
        D(fprintf(stderr, "%*c%s del_target[%d-%d]: %s failed!\n", p->level, ' ',
20106
9.04k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
20107
9.04k
    }
20108
0
    { // del_t_atom
20109
9.04k
        if (p->error_indicator) {
20110
0
            p->level--;
20111
0
            return NULL;
20112
0
        }
20113
9.04k
        D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_t_atom"));
20114
9.04k
        expr_ty del_t_atom_var;
20115
9.04k
        if (
20116
9.04k
            (del_t_atom_var = del_t_atom_rule(p))  // del_t_atom
20117
9.04k
        )
20118
5.73k
        {
20119
5.73k
            D(fprintf(stderr, "%*c+ del_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "del_t_atom"));
20120
5.73k
            _res = del_t_atom_var;
20121
5.73k
            goto done;
20122
5.73k
        }
20123
3.31k
        p->mark = _mark;
20124
3.31k
        D(fprintf(stderr, "%*c%s del_target[%d-%d]: %s failed!\n", p->level, ' ',
20125
3.31k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "del_t_atom"));
20126
3.31k
    }
20127
0
    _res = NULL;
20128
9.27k
  done:
20129
9.27k
    _PyPegen_insert_memo(p, _mark, del_target_type, _res);
20130
9.27k
    p->level--;
20131
9.27k
    return _res;
20132
3.31k
}
20133
20134
// del_t_atom: NAME | '(' del_target ')' | '(' del_targets? ')' | '[' del_targets? ']'
20135
static expr_ty
20136
del_t_atom_rule(Parser *p)
20137
9.04k
{
20138
9.04k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
20139
0
        _Pypegen_stack_overflow(p);
20140
0
    }
20141
9.04k
    if (p->error_indicator) {
20142
0
        p->level--;
20143
0
        return NULL;
20144
0
    }
20145
9.04k
    expr_ty _res = NULL;
20146
9.04k
    int _mark = p->mark;
20147
9.04k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
20148
0
        p->error_indicator = 1;
20149
0
        p->level--;
20150
0
        return NULL;
20151
0
    }
20152
9.04k
    int _start_lineno = p->tokens[_mark]->lineno;
20153
9.04k
    UNUSED(_start_lineno); // Only used by EXTRA macro
20154
9.04k
    int _start_col_offset = p->tokens[_mark]->col_offset;
20155
9.04k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
20156
9.04k
    { // NAME
20157
9.04k
        if (p->error_indicator) {
20158
0
            p->level--;
20159
0
            return NULL;
20160
0
        }
20161
9.04k
        D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
20162
9.04k
        expr_ty a;
20163
9.04k
        if (
20164
9.04k
            (a = _PyPegen_name_token(p))  // NAME
20165
9.04k
        )
20166
2.90k
        {
20167
2.90k
            D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
20168
2.90k
            _res = _PyPegen_set_expr_context ( p , a , Del );
20169
2.90k
            if (_res == NULL && PyErr_Occurred()) {
20170
0
                p->error_indicator = 1;
20171
0
                p->level--;
20172
0
                return NULL;
20173
0
            }
20174
2.90k
            goto done;
20175
2.90k
        }
20176
6.13k
        p->mark = _mark;
20177
6.13k
        D(fprintf(stderr, "%*c%s del_t_atom[%d-%d]: %s failed!\n", p->level, ' ',
20178
6.13k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
20179
6.13k
    }
20180
0
    { // '(' del_target ')'
20181
6.13k
        if (p->error_indicator) {
20182
0
            p->level--;
20183
0
            return NULL;
20184
0
        }
20185
6.13k
        D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' del_target ')'"));
20186
6.13k
        Token * _literal;
20187
6.13k
        Token * _literal_1;
20188
6.13k
        expr_ty a;
20189
6.13k
        if (
20190
6.13k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
20191
6.13k
            &&
20192
6.13k
            (a = del_target_rule(p))  // del_target
20193
6.13k
            &&
20194
6.13k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
20195
6.13k
        )
20196
180
        {
20197
180
            D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' del_target ')'"));
20198
180
            _res = _PyPegen_set_expr_context ( p , a , Del );
20199
180
            if (_res == NULL && PyErr_Occurred()) {
20200
0
                p->error_indicator = 1;
20201
0
                p->level--;
20202
0
                return NULL;
20203
0
            }
20204
180
            goto done;
20205
180
        }
20206
5.95k
        p->mark = _mark;
20207
5.95k
        D(fprintf(stderr, "%*c%s del_t_atom[%d-%d]: %s failed!\n", p->level, ' ',
20208
5.95k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' del_target ')'"));
20209
5.95k
    }
20210
0
    { // '(' del_targets? ')'
20211
5.95k
        if (p->error_indicator) {
20212
0
            p->level--;
20213
0
            return NULL;
20214
0
        }
20215
5.95k
        D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' del_targets? ')'"));
20216
5.95k
        Token * _literal;
20217
5.95k
        Token * _literal_1;
20218
5.95k
        void *a;
20219
5.95k
        if (
20220
5.95k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
20221
5.95k
            &&
20222
5.95k
            (a = del_targets_rule(p), !p->error_indicator)  // del_targets?
20223
5.95k
            &&
20224
5.95k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
20225
5.95k
        )
20226
2.16k
        {
20227
2.16k
            D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' del_targets? ')'"));
20228
2.16k
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
20229
2.16k
            if (_token == NULL) {
20230
0
                p->level--;
20231
0
                return NULL;
20232
0
            }
20233
2.16k
            int _end_lineno = _token->end_lineno;
20234
2.16k
            UNUSED(_end_lineno); // Only used by EXTRA macro
20235
2.16k
            int _end_col_offset = _token->end_col_offset;
20236
2.16k
            UNUSED(_end_col_offset); // Only used by EXTRA macro
20237
2.16k
            _res = _PyAST_Tuple ( a , Del , EXTRA );
20238
2.16k
            if (_res == NULL && PyErr_Occurred()) {
20239
0
                p->error_indicator = 1;
20240
0
                p->level--;
20241
0
                return NULL;
20242
0
            }
20243
2.16k
            goto done;
20244
2.16k
        }
20245
3.79k
        p->mark = _mark;
20246
3.79k
        D(fprintf(stderr, "%*c%s del_t_atom[%d-%d]: %s failed!\n", p->level, ' ',
20247
3.79k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' del_targets? ')'"));
20248
3.79k
    }
20249
0
    { // '[' del_targets? ']'
20250
3.79k
        if (p->error_indicator) {
20251
0
            p->level--;
20252
0
            return NULL;
20253
0
        }
20254
3.79k
        D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' del_targets? ']'"));
20255
3.79k
        Token * _literal;
20256
3.79k
        Token * _literal_1;
20257
3.79k
        void *a;
20258
3.79k
        if (
20259
3.79k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
20260
3.79k
            &&
20261
3.79k
            (a = del_targets_rule(p), !p->error_indicator)  // del_targets?
20262
3.79k
            &&
20263
3.79k
            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
20264
3.79k
        )
20265
480
        {
20266
480
            D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' del_targets? ']'"));
20267
480
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
20268
480
            if (_token == NULL) {
20269
0
                p->level--;
20270
0
                return NULL;
20271
0
            }
20272
480
            int _end_lineno = _token->end_lineno;
20273
480
            UNUSED(_end_lineno); // Only used by EXTRA macro
20274
480
            int _end_col_offset = _token->end_col_offset;
20275
480
            UNUSED(_end_col_offset); // Only used by EXTRA macro
20276
480
            _res = _PyAST_List ( a , Del , EXTRA );
20277
480
            if (_res == NULL && PyErr_Occurred()) {
20278
0
                p->error_indicator = 1;
20279
0
                p->level--;
20280
0
                return NULL;
20281
0
            }
20282
480
            goto done;
20283
480
        }
20284
3.31k
        p->mark = _mark;
20285
3.31k
        D(fprintf(stderr, "%*c%s del_t_atom[%d-%d]: %s failed!\n", p->level, ' ',
20286
3.31k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' del_targets? ']'"));
20287
3.31k
    }
20288
0
    _res = NULL;
20289
9.04k
  done:
20290
9.04k
    p->level--;
20291
9.04k
    return _res;
20292
3.31k
}
20293
20294
// type_expressions:
20295
//     | ','.expression+ ',' '*' expression ',' '**' expression
20296
//     | ','.expression+ ',' '*' expression
20297
//     | ','.expression+ ',' '**' expression
20298
//     | '*' expression ',' '**' expression
20299
//     | '*' expression
20300
//     | '**' expression
20301
//     | ','.expression+
20302
static asdl_expr_seq*
20303
type_expressions_rule(Parser *p)
20304
0
{
20305
0
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
20306
0
        _Pypegen_stack_overflow(p);
20307
0
    }
20308
0
    if (p->error_indicator) {
20309
0
        p->level--;
20310
0
        return NULL;
20311
0
    }
20312
0
    asdl_expr_seq* _res = NULL;
20313
0
    int _mark = p->mark;
20314
0
    { // ','.expression+ ',' '*' expression ',' '**' expression
20315
0
        if (p->error_indicator) {
20316
0
            p->level--;
20317
0
            return NULL;
20318
0
        }
20319
0
        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression"));
20320
0
        Token * _literal;
20321
0
        Token * _literal_1;
20322
0
        Token * _literal_2;
20323
0
        Token * _literal_3;
20324
0
        asdl_seq * a;
20325
0
        expr_ty b;
20326
0
        expr_ty c;
20327
0
        if (
20328
0
            (a = _gather_102_rule(p))  // ','.expression+
20329
0
            &&
20330
0
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
20331
0
            &&
20332
0
            (_literal_1 = _PyPegen_expect_token(p, 16))  // token='*'
20333
0
            &&
20334
0
            (b = expression_rule(p))  // expression
20335
0
            &&
20336
0
            (_literal_2 = _PyPegen_expect_token(p, 12))  // token=','
20337
0
            &&
20338
0
            (_literal_3 = _PyPegen_expect_token(p, 35))  // token='**'
20339
0
            &&
20340
0
            (c = expression_rule(p))  // expression
20341
0
        )
20342
0
        {
20343
0
            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression"));
20344
0
            _res = ( asdl_expr_seq* ) _PyPegen_seq_append_to_end ( p , CHECK ( asdl_seq* , _PyPegen_seq_append_to_end ( p , a , b ) ) , c );
20345
0
            if (_res == NULL && PyErr_Occurred()) {
20346
0
                p->error_indicator = 1;
20347
0
                p->level--;
20348
0
                return NULL;
20349
0
            }
20350
0
            goto done;
20351
0
        }
20352
0
        p->mark = _mark;
20353
0
        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
20354
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression"));
20355
0
    }
20356
0
    { // ','.expression+ ',' '*' expression
20357
0
        if (p->error_indicator) {
20358
0
            p->level--;
20359
0
            return NULL;
20360
0
        }
20361
0
        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression"));
20362
0
        Token * _literal;
20363
0
        Token * _literal_1;
20364
0
        asdl_seq * a;
20365
0
        expr_ty b;
20366
0
        if (
20367
0
            (a = _gather_102_rule(p))  // ','.expression+
20368
0
            &&
20369
0
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
20370
0
            &&
20371
0
            (_literal_1 = _PyPegen_expect_token(p, 16))  // token='*'
20372
0
            &&
20373
0
            (b = expression_rule(p))  // expression
20374
0
        )
20375
0
        {
20376
0
            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression"));
20377
0
            _res = ( asdl_expr_seq* ) _PyPegen_seq_append_to_end ( p , a , b );
20378
0
            if (_res == NULL && PyErr_Occurred()) {
20379
0
                p->error_indicator = 1;
20380
0
                p->level--;
20381
0
                return NULL;
20382
0
            }
20383
0
            goto done;
20384
0
        }
20385
0
        p->mark = _mark;
20386
0
        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
20387
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '*' expression"));
20388
0
    }
20389
0
    { // ','.expression+ ',' '**' expression
20390
0
        if (p->error_indicator) {
20391
0
            p->level--;
20392
0
            return NULL;
20393
0
        }
20394
0
        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '**' expression"));
20395
0
        Token * _literal;
20396
0
        Token * _literal_1;
20397
0
        asdl_seq * a;
20398
0
        expr_ty b;
20399
0
        if (
20400
0
            (a = _gather_102_rule(p))  // ','.expression+
20401
0
            &&
20402
0
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
20403
0
            &&
20404
0
            (_literal_1 = _PyPegen_expect_token(p, 35))  // token='**'
20405
0
            &&
20406
0
            (b = expression_rule(p))  // expression
20407
0
        )
20408
0
        {
20409
0
            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '**' expression"));
20410
0
            _res = ( asdl_expr_seq* ) _PyPegen_seq_append_to_end ( p , a , b );
20411
0
            if (_res == NULL && PyErr_Occurred()) {
20412
0
                p->error_indicator = 1;
20413
0
                p->level--;
20414
0
                return NULL;
20415
0
            }
20416
0
            goto done;
20417
0
        }
20418
0
        p->mark = _mark;
20419
0
        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
20420
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '**' expression"));
20421
0
    }
20422
0
    { // '*' expression ',' '**' expression
20423
0
        if (p->error_indicator) {
20424
0
            p->level--;
20425
0
            return NULL;
20426
0
        }
20427
0
        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression ',' '**' expression"));
20428
0
        Token * _literal;
20429
0
        Token * _literal_1;
20430
0
        Token * _literal_2;
20431
0
        expr_ty a;
20432
0
        expr_ty b;
20433
0
        if (
20434
0
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
20435
0
            &&
20436
0
            (a = expression_rule(p))  // expression
20437
0
            &&
20438
0
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
20439
0
            &&
20440
0
            (_literal_2 = _PyPegen_expect_token(p, 35))  // token='**'
20441
0
            &&
20442
0
            (b = expression_rule(p))  // expression
20443
0
        )
20444
0
        {
20445
0
            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression ',' '**' expression"));
20446
0
            _res = ( asdl_expr_seq* ) _PyPegen_seq_append_to_end ( p , CHECK ( asdl_seq* , _PyPegen_singleton_seq ( p , a ) ) , b );
20447
0
            if (_res == NULL && PyErr_Occurred()) {
20448
0
                p->error_indicator = 1;
20449
0
                p->level--;
20450
0
                return NULL;
20451
0
            }
20452
0
            goto done;
20453
0
        }
20454
0
        p->mark = _mark;
20455
0
        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
20456
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression ',' '**' expression"));
20457
0
    }
20458
0
    { // '*' expression
20459
0
        if (p->error_indicator) {
20460
0
            p->level--;
20461
0
            return NULL;
20462
0
        }
20463
0
        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression"));
20464
0
        Token * _literal;
20465
0
        expr_ty a;
20466
0
        if (
20467
0
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
20468
0
            &&
20469
0
            (a = expression_rule(p))  // expression
20470
0
        )
20471
0
        {
20472
0
            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression"));
20473
0
            _res = ( asdl_expr_seq* ) _PyPegen_singleton_seq ( p , a );
20474
0
            if (_res == NULL && PyErr_Occurred()) {
20475
0
                p->error_indicator = 1;
20476
0
                p->level--;
20477
0
                return NULL;
20478
0
            }
20479
0
            goto done;
20480
0
        }
20481
0
        p->mark = _mark;
20482
0
        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
20483
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression"));
20484
0
    }
20485
0
    { // '**' expression
20486
0
        if (p->error_indicator) {
20487
0
            p->level--;
20488
0
            return NULL;
20489
0
        }
20490
0
        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression"));
20491
0
        Token * _literal;
20492
0
        expr_ty a;
20493
0
        if (
20494
0
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
20495
0
            &&
20496
0
            (a = expression_rule(p))  // expression
20497
0
        )
20498
0
        {
20499
0
            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression"));
20500
0
            _res = ( asdl_expr_seq* ) _PyPegen_singleton_seq ( p , a );
20501
0
            if (_res == NULL && PyErr_Occurred()) {
20502
0
                p->error_indicator = 1;
20503
0
                p->level--;
20504
0
                return NULL;
20505
0
            }
20506
0
            goto done;
20507
0
        }
20508
0
        p->mark = _mark;
20509
0
        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
20510
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression"));
20511
0
    }
20512
0
    { // ','.expression+
20513
0
        if (p->error_indicator) {
20514
0
            p->level--;
20515
0
            return NULL;
20516
0
        }
20517
0
        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+"));
20518
0
        asdl_expr_seq* a;
20519
0
        if (
20520
0
            (a = (asdl_expr_seq*)_gather_102_rule(p))  // ','.expression+
20521
0
        )
20522
0
        {
20523
0
            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+"));
20524
0
            _res = a;
20525
0
            if (_res == NULL && PyErr_Occurred()) {
20526
0
                p->error_indicator = 1;
20527
0
                p->level--;
20528
0
                return NULL;
20529
0
            }
20530
0
            goto done;
20531
0
        }
20532
0
        p->mark = _mark;
20533
0
        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
20534
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+"));
20535
0
    }
20536
0
    _res = NULL;
20537
0
  done:
20538
0
    p->level--;
20539
0
    return _res;
20540
0
}
20541
20542
// func_type_comment:
20543
//     | NEWLINE TYPE_COMMENT &(NEWLINE INDENT)
20544
//     | invalid_double_type_comments
20545
//     | TYPE_COMMENT
20546
static Token*
20547
func_type_comment_rule(Parser *p)
20548
10.0k
{
20549
10.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
20550
0
        _Pypegen_stack_overflow(p);
20551
0
    }
20552
10.0k
    if (p->error_indicator) {
20553
0
        p->level--;
20554
0
        return NULL;
20555
0
    }
20556
10.0k
    Token* _res = NULL;
20557
10.0k
    int _mark = p->mark;
20558
10.0k
    { // NEWLINE TYPE_COMMENT &(NEWLINE INDENT)
20559
10.0k
        if (p->error_indicator) {
20560
0
            p->level--;
20561
0
            return NULL;
20562
0
        }
20563
10.0k
        D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
20564
10.0k
        Token * newline_var;
20565
10.0k
        Token * t;
20566
10.0k
        if (
20567
10.0k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
20568
10.0k
            &&
20569
10.0k
            (t = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
20570
10.0k
            &&
20571
10.0k
            _PyPegen_lookahead(1, _tmp_103_rule, p)
20572
10.0k
        )
20573
0
        {
20574
0
            D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
20575
0
            _res = t;
20576
0
            if (_res == NULL && PyErr_Occurred()) {
20577
0
                p->error_indicator = 1;
20578
0
                p->level--;
20579
0
                return NULL;
20580
0
            }
20581
0
            goto done;
20582
0
        }
20583
10.0k
        p->mark = _mark;
20584
10.0k
        D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ',
20585
10.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
20586
10.0k
    }
20587
10.0k
    if (p->call_invalid_rules) { // invalid_double_type_comments
20588
1.93k
        if (p->error_indicator) {
20589
0
            p->level--;
20590
0
            return NULL;
20591
0
        }
20592
1.93k
        D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments"));
20593
1.93k
        void *invalid_double_type_comments_var;
20594
1.93k
        if (
20595
1.93k
            (invalid_double_type_comments_var = invalid_double_type_comments_rule(p))  // invalid_double_type_comments
20596
1.93k
        )
20597
0
        {
20598
0
            D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments"));
20599
0
            _res = invalid_double_type_comments_var;
20600
0
            goto done;
20601
0
        }
20602
1.93k
        p->mark = _mark;
20603
1.93k
        D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ',
20604
1.93k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_double_type_comments"));
20605
1.93k
    }
20606
10.0k
    { // TYPE_COMMENT
20607
10.0k
        if (p->error_indicator) {
20608
3
            p->level--;
20609
3
            return NULL;
20610
3
        }
20611
10.0k
        D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT"));
20612
10.0k
        Token * type_comment_var;
20613
10.0k
        if (
20614
10.0k
            (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
20615
10.0k
        )
20616
0
        {
20617
0
            D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT"));
20618
0
            _res = type_comment_var;
20619
0
            goto done;
20620
0
        }
20621
10.0k
        p->mark = _mark;
20622
10.0k
        D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ',
20623
10.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TYPE_COMMENT"));
20624
10.0k
    }
20625
0
    _res = NULL;
20626
10.0k
  done:
20627
10.0k
    p->level--;
20628
10.0k
    return _res;
20629
10.0k
}
20630
20631
// invalid_arguments:
20632
//     | ((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+
20633
//     | expression for_if_clauses ',' [args | expression for_if_clauses]
20634
//     | NAME '=' expression for_if_clauses
20635
//     | [(args ',')] NAME '=' &(',' | ')')
20636
//     | args for_if_clauses
20637
//     | args ',' expression for_if_clauses
20638
//     | args ',' args
20639
static void *
20640
invalid_arguments_rule(Parser *p)
20641
7.48k
{
20642
7.48k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
20643
0
        _Pypegen_stack_overflow(p);
20644
0
    }
20645
7.48k
    if (p->error_indicator) {
20646
0
        p->level--;
20647
0
        return NULL;
20648
0
    }
20649
7.48k
    void * _res = NULL;
20650
7.48k
    int _mark = p->mark;
20651
7.48k
    { // ((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+
20652
7.48k
        if (p->error_indicator) {
20653
0
            p->level--;
20654
0
            return NULL;
20655
0
        }
20656
7.48k
        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+"));
20657
7.48k
        asdl_seq * _gather_106_var;
20658
7.48k
        void *_tmp_104_var;
20659
7.48k
        Token * a;
20660
7.48k
        if (
20661
7.48k
            (_tmp_104_var = _tmp_104_rule(p))  // (','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs
20662
7.48k
            &&
20663
7.48k
            (a = _PyPegen_expect_token(p, 12))  // token=','
20664
7.48k
            &&
20665
7.48k
            (_gather_106_var = _gather_106_rule(p))  // ','.(starred_expression !'=')+
20666
7.48k
        )
20667
305
        {
20668
305
            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 !'=')+"));
20669
305
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "iterable argument unpacking follows keyword argument unpacking" );
20670
305
            if (_res == NULL && PyErr_Occurred()) {
20671
305
                p->error_indicator = 1;
20672
305
                p->level--;
20673
305
                return NULL;
20674
305
            }
20675
0
            goto done;
20676
305
        }
20677
7.18k
        p->mark = _mark;
20678
7.18k
        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
20679
7.18k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+"));
20680
7.18k
    }
20681
0
    { // expression for_if_clauses ',' [args | expression for_if_clauses]
20682
7.18k
        if (p->error_indicator) {
20683
73
            p->level--;
20684
73
            return NULL;
20685
73
        }
20686
7.10k
        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]"));
20687
7.10k
        Token * _literal;
20688
7.10k
        void *_opt_var;
20689
7.10k
        UNUSED(_opt_var); // Silence compiler warnings
20690
7.10k
        expr_ty a;
20691
7.10k
        asdl_comprehension_seq* b;
20692
7.10k
        if (
20693
7.10k
            (a = expression_rule(p))  // expression
20694
7.10k
            &&
20695
7.10k
            (b = for_if_clauses_rule(p))  // for_if_clauses
20696
7.10k
            &&
20697
7.10k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
20698
7.10k
            &&
20699
7.10k
            (_opt_var = _tmp_107_rule(p), !p->error_indicator)  // [args | expression for_if_clauses]
20700
7.10k
        )
20701
6
        {
20702
6
            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]"));
20703
6
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , _PyPegen_get_last_comprehension_item ( PyPegen_last_item ( b , comprehension_ty ) ) , "Generator expression must be parenthesized" );
20704
6
            if (_res == NULL && PyErr_Occurred()) {
20705
6
                p->error_indicator = 1;
20706
6
                p->level--;
20707
6
                return NULL;
20708
6
            }
20709
0
            goto done;
20710
6
        }
20711
7.10k
        p->mark = _mark;
20712
7.10k
        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
20713
7.10k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]"));
20714
7.10k
    }
20715
0
    { // NAME '=' expression for_if_clauses
20716
7.10k
        if (p->error_indicator) {
20717
53
            p->level--;
20718
53
            return NULL;
20719
53
        }
20720
7.04k
        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
20721
7.04k
        expr_ty a;
20722
7.04k
        Token * b;
20723
7.04k
        expr_ty expression_var;
20724
7.04k
        asdl_comprehension_seq* for_if_clauses_var;
20725
7.04k
        if (
20726
7.04k
            (a = _PyPegen_name_token(p))  // NAME
20727
7.04k
            &&
20728
7.04k
            (b = _PyPegen_expect_token(p, 22))  // token='='
20729
7.04k
            &&
20730
7.04k
            (expression_var = expression_rule(p))  // expression
20731
7.04k
            &&
20732
7.04k
            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
20733
7.04k
        )
20734
0
        {
20735
0
            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
20736
0
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" );
20737
0
            if (_res == NULL && PyErr_Occurred()) {
20738
0
                p->error_indicator = 1;
20739
0
                p->level--;
20740
0
                return NULL;
20741
0
            }
20742
0
            goto done;
20743
0
        }
20744
7.04k
        p->mark = _mark;
20745
7.04k
        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
20746
7.04k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression for_if_clauses"));
20747
7.04k
    }
20748
0
    { // [(args ',')] NAME '=' &(',' | ')')
20749
7.04k
        if (p->error_indicator) {
20750
0
            p->level--;
20751
0
            return NULL;
20752
0
        }
20753
7.04k
        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(args ',')] NAME '=' &(',' | ')')"));
20754
7.04k
        void *_opt_var;
20755
7.04k
        UNUSED(_opt_var); // Silence compiler warnings
20756
7.04k
        expr_ty a;
20757
7.04k
        Token * b;
20758
7.04k
        if (
20759
7.04k
            (_opt_var = _tmp_108_rule(p), !p->error_indicator)  // [(args ',')]
20760
7.04k
            &&
20761
7.04k
            (a = _PyPegen_name_token(p))  // NAME
20762
7.04k
            &&
20763
7.04k
            (b = _PyPegen_expect_token(p, 22))  // token='='
20764
7.04k
            &&
20765
7.04k
            _PyPegen_lookahead(1, _tmp_109_rule, p)
20766
7.04k
        )
20767
11
        {
20768
11
            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "[(args ',')] NAME '=' &(',' | ')')"));
20769
11
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "expected argument value expression" );
20770
11
            if (_res == NULL && PyErr_Occurred()) {
20771
11
                p->error_indicator = 1;
20772
11
                p->level--;
20773
11
                return NULL;
20774
11
            }
20775
0
            goto done;
20776
11
        }
20777
7.03k
        p->mark = _mark;
20778
7.03k
        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
20779
7.03k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "[(args ',')] NAME '=' &(',' | ')')"));
20780
7.03k
    }
20781
0
    { // args for_if_clauses
20782
7.03k
        if (p->error_indicator) {
20783
0
            p->level--;
20784
0
            return NULL;
20785
0
        }
20786
7.03k
        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args for_if_clauses"));
20787
7.03k
        expr_ty a;
20788
7.03k
        asdl_comprehension_seq* b;
20789
7.03k
        if (
20790
7.03k
            (a = args_rule(p))  // args
20791
7.03k
            &&
20792
7.03k
            (b = for_if_clauses_rule(p))  // for_if_clauses
20793
7.03k
        )
20794
239
        {
20795
239
            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args for_if_clauses"));
20796
239
            _res = _PyPegen_nonparen_genexp_in_call ( p , a , b );
20797
239
            if (_res == NULL && PyErr_Occurred()) {
20798
2
                p->error_indicator = 1;
20799
2
                p->level--;
20800
2
                return NULL;
20801
2
            }
20802
237
            goto done;
20803
239
        }
20804
6.79k
        p->mark = _mark;
20805
6.79k
        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
20806
6.79k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args for_if_clauses"));
20807
6.79k
    }
20808
0
    { // args ',' expression for_if_clauses
20809
6.79k
        if (p->error_indicator) {
20810
100
            p->level--;
20811
100
            return NULL;
20812
100
        }
20813
6.69k
        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' expression for_if_clauses"));
20814
6.69k
        Token * _literal;
20815
6.69k
        expr_ty a;
20816
6.69k
        expr_ty args_var;
20817
6.69k
        asdl_comprehension_seq* b;
20818
6.69k
        if (
20819
6.69k
            (args_var = args_rule(p))  // args
20820
6.69k
            &&
20821
6.69k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
20822
6.69k
            &&
20823
6.69k
            (a = expression_rule(p))  // expression
20824
6.69k
            &&
20825
6.69k
            (b = for_if_clauses_rule(p))  // for_if_clauses
20826
6.69k
        )
20827
1
        {
20828
1
            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ',' expression for_if_clauses"));
20829
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , _PyPegen_get_last_comprehension_item ( PyPegen_last_item ( b , comprehension_ty ) ) , "Generator expression must be parenthesized" );
20830
1
            if (_res == NULL && PyErr_Occurred()) {
20831
1
                p->error_indicator = 1;
20832
1
                p->level--;
20833
1
                return NULL;
20834
1
            }
20835
0
            goto done;
20836
1
        }
20837
6.69k
        p->mark = _mark;
20838
6.69k
        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
20839
6.69k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ',' expression for_if_clauses"));
20840
6.69k
    }
20841
0
    { // args ',' args
20842
6.69k
        if (p->error_indicator) {
20843
93
            p->level--;
20844
93
            return NULL;
20845
93
        }
20846
6.60k
        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' args"));
20847
6.60k
        Token * _literal;
20848
6.60k
        expr_ty a;
20849
6.60k
        expr_ty args_var;
20850
6.60k
        if (
20851
6.60k
            (a = args_rule(p))  // args
20852
6.60k
            &&
20853
6.60k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
20854
6.60k
            &&
20855
6.60k
            (args_var = args_rule(p))  // args
20856
6.60k
        )
20857
34
        {
20858
34
            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ',' args"));
20859
34
            _res = _PyPegen_arguments_parsing_error ( p , a );
20860
34
            if (_res == NULL && PyErr_Occurred()) {
20861
34
                p->error_indicator = 1;
20862
34
                p->level--;
20863
34
                return NULL;
20864
34
            }
20865
0
            goto done;
20866
34
        }
20867
6.57k
        p->mark = _mark;
20868
6.57k
        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
20869
6.57k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ',' args"));
20870
6.57k
    }
20871
0
    _res = NULL;
20872
6.80k
  done:
20873
6.80k
    p->level--;
20874
6.80k
    return _res;
20875
6.57k
}
20876
20877
// invalid_kwarg:
20878
//     | ('True' | 'False' | 'None') '='
20879
//     | NAME '=' expression for_if_clauses
20880
//     | !(NAME '=') expression '='
20881
//     | '**' expression '=' expression
20882
static void *
20883
invalid_kwarg_rule(Parser *p)
20884
112k
{
20885
112k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
20886
0
        _Pypegen_stack_overflow(p);
20887
0
    }
20888
112k
    if (p->error_indicator) {
20889
0
        p->level--;
20890
0
        return NULL;
20891
0
    }
20892
112k
    void * _res = NULL;
20893
112k
    int _mark = p->mark;
20894
112k
    { // ('True' | 'False' | 'None') '='
20895
112k
        if (p->error_indicator) {
20896
0
            p->level--;
20897
0
            return NULL;
20898
0
        }
20899
112k
        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('True' | 'False' | 'None') '='"));
20900
112k
        Token* a;
20901
112k
        Token * b;
20902
112k
        if (
20903
112k
            (a = (Token*)_tmp_110_rule(p))  // 'True' | 'False' | 'None'
20904
112k
            &&
20905
112k
            (b = _PyPegen_expect_token(p, 22))  // token='='
20906
112k
        )
20907
4
        {
20908
4
            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('True' | 'False' | 'None') '='"));
20909
4
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to %s" , PyBytes_AS_STRING ( a -> bytes ) );
20910
4
            if (_res == NULL && PyErr_Occurred()) {
20911
4
                p->error_indicator = 1;
20912
4
                p->level--;
20913
4
                return NULL;
20914
4
            }
20915
0
            goto done;
20916
4
        }
20917
112k
        p->mark = _mark;
20918
112k
        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
20919
112k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('True' | 'False' | 'None') '='"));
20920
112k
    }
20921
0
    { // NAME '=' expression for_if_clauses
20922
112k
        if (p->error_indicator) {
20923
3
            p->level--;
20924
3
            return NULL;
20925
3
        }
20926
112k
        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
20927
112k
        expr_ty a;
20928
112k
        Token * b;
20929
112k
        expr_ty expression_var;
20930
112k
        asdl_comprehension_seq* for_if_clauses_var;
20931
112k
        if (
20932
112k
            (a = _PyPegen_name_token(p))  // NAME
20933
112k
            &&
20934
112k
            (b = _PyPegen_expect_token(p, 22))  // token='='
20935
112k
            &&
20936
112k
            (expression_var = expression_rule(p))  // expression
20937
112k
            &&
20938
112k
            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
20939
112k
        )
20940
1
        {
20941
1
            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
20942
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" );
20943
1
            if (_res == NULL && PyErr_Occurred()) {
20944
1
                p->error_indicator = 1;
20945
1
                p->level--;
20946
1
                return NULL;
20947
1
            }
20948
0
            goto done;
20949
1
        }
20950
112k
        p->mark = _mark;
20951
112k
        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
20952
112k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression for_if_clauses"));
20953
112k
    }
20954
0
    { // !(NAME '=') expression '='
20955
112k
        if (p->error_indicator) {
20956
297
            p->level--;
20957
297
            return NULL;
20958
297
        }
20959
112k
        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(NAME '=') expression '='"));
20960
112k
        expr_ty a;
20961
112k
        Token * b;
20962
112k
        if (
20963
112k
            _PyPegen_lookahead(0, _tmp_111_rule, p)
20964
112k
            &&
20965
112k
            (a = expression_rule(p))  // expression
20966
112k
            &&
20967
112k
            (b = _PyPegen_expect_token(p, 22))  // token='='
20968
112k
        )
20969
7
        {
20970
7
            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(NAME '=') expression '='"));
20971
7
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "expression cannot contain assignment, perhaps you meant \"==\"?" );
20972
7
            if (_res == NULL && PyErr_Occurred()) {
20973
7
                p->error_indicator = 1;
20974
7
                p->level--;
20975
7
                return NULL;
20976
7
            }
20977
0
            goto done;
20978
7
        }
20979
112k
        p->mark = _mark;
20980
112k
        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
20981
112k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!(NAME '=') expression '='"));
20982
112k
    }
20983
0
    { // '**' expression '=' expression
20984
112k
        if (p->error_indicator) {
20985
417
            p->level--;
20986
417
            return NULL;
20987
417
        }
20988
112k
        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression '=' expression"));
20989
112k
        Token * _literal;
20990
112k
        Token * a;
20991
112k
        expr_ty b;
20992
112k
        expr_ty expression_var;
20993
112k
        if (
20994
112k
            (a = _PyPegen_expect_token(p, 35))  // token='**'
20995
112k
            &&
20996
112k
            (expression_var = expression_rule(p))  // expression
20997
112k
            &&
20998
112k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
20999
112k
            &&
21000
112k
            (b = expression_rule(p))  // expression
21001
112k
        )
21002
1
        {
21003
1
            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression '=' expression"));
21004
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to keyword argument unpacking" );
21005
1
            if (_res == NULL && PyErr_Occurred()) {
21006
1
                p->error_indicator = 1;
21007
1
                p->level--;
21008
1
                return NULL;
21009
1
            }
21010
0
            goto done;
21011
1
        }
21012
112k
        p->mark = _mark;
21013
112k
        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
21014
112k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression '=' expression"));
21015
112k
    }
21016
0
    _res = NULL;
21017
112k
  done:
21018
112k
    p->level--;
21019
112k
    return _res;
21020
112k
}
21021
21022
// expression_without_invalid:
21023
//     | disjunction 'if' disjunction 'else' expression
21024
//     | disjunction
21025
//     | lambdef
21026
static expr_ty
21027
expression_without_invalid_rule(Parser *p)
21028
86.2k
{
21029
86.2k
    int _prev_call_invalid = p->call_invalid_rules;
21030
86.2k
    p->call_invalid_rules = 0;
21031
86.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
21032
2
        _Pypegen_stack_overflow(p);
21033
2
    }
21034
86.2k
    if (p->error_indicator) {
21035
20
        p->call_invalid_rules = _prev_call_invalid;
21036
20
        p->level--;
21037
20
        return NULL;
21038
20
    }
21039
86.2k
    expr_ty _res = NULL;
21040
86.2k
    int _mark = p->mark;
21041
86.2k
    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
21042
0
        p->error_indicator = 1;
21043
0
        p->call_invalid_rules = _prev_call_invalid;
21044
0
        p->level--;
21045
0
        return NULL;
21046
0
    }
21047
86.2k
    int _start_lineno = p->tokens[_mark]->lineno;
21048
86.2k
    UNUSED(_start_lineno); // Only used by EXTRA macro
21049
86.2k
    int _start_col_offset = p->tokens[_mark]->col_offset;
21050
86.2k
    UNUSED(_start_col_offset); // Only used by EXTRA macro
21051
86.2k
    { // disjunction 'if' disjunction 'else' expression
21052
86.2k
        if (p->error_indicator) {
21053
0
            p->call_invalid_rules = _prev_call_invalid;
21054
0
            p->level--;
21055
0
            return NULL;
21056
0
        }
21057
86.2k
        D(fprintf(stderr, "%*c> expression_without_invalid[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
21058
86.2k
        Token * _keyword;
21059
86.2k
        Token * _keyword_1;
21060
86.2k
        expr_ty a;
21061
86.2k
        expr_ty b;
21062
86.2k
        expr_ty c;
21063
86.2k
        if (
21064
86.2k
            (a = disjunction_rule(p))  // disjunction
21065
86.2k
            &&
21066
86.2k
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
21067
86.2k
            &&
21068
86.2k
            (b = disjunction_rule(p))  // disjunction
21069
86.2k
            &&
21070
86.2k
            (_keyword_1 = _PyPegen_expect_token(p, 691))  // token='else'
21071
86.2k
            &&
21072
86.2k
            (c = expression_rule(p))  // expression
21073
86.2k
        )
21074
67
        {
21075
67
            D(fprintf(stderr, "%*c+ expression_without_invalid[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
21076
67
            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
21077
67
            if (_token == NULL) {
21078
0
                p->call_invalid_rules = _prev_call_invalid;
21079
0
                p->level--;
21080
0
                return NULL;
21081
0
            }
21082
67
            int _end_lineno = _token->end_lineno;
21083
67
            UNUSED(_end_lineno); // Only used by EXTRA macro
21084
67
            int _end_col_offset = _token->end_col_offset;
21085
67
            UNUSED(_end_col_offset); // Only used by EXTRA macro
21086
67
            _res = _PyAST_IfExp ( b , a , c , EXTRA );
21087
67
            if (_res == NULL && PyErr_Occurred()) {
21088
0
                p->error_indicator = 1;
21089
0
                p->call_invalid_rules = _prev_call_invalid;
21090
0
                p->level--;
21091
0
                return NULL;
21092
0
            }
21093
67
            goto done;
21094
67
        }
21095
86.1k
        p->mark = _mark;
21096
86.1k
        D(fprintf(stderr, "%*c%s expression_without_invalid[%d-%d]: %s failed!\n", p->level, ' ',
21097
86.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
21098
86.1k
    }
21099
0
    { // disjunction
21100
86.1k
        if (p->error_indicator) {
21101
442
            p->call_invalid_rules = _prev_call_invalid;
21102
442
            p->level--;
21103
442
            return NULL;
21104
442
        }
21105
85.7k
        D(fprintf(stderr, "%*c> expression_without_invalid[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction"));
21106
85.7k
        expr_ty disjunction_var;
21107
85.7k
        if (
21108
85.7k
            (disjunction_var = disjunction_rule(p))  // disjunction
21109
85.7k
        )
21110
5.84k
        {
21111
5.84k
            D(fprintf(stderr, "%*c+ expression_without_invalid[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction"));
21112
5.84k
            _res = disjunction_var;
21113
5.84k
            goto done;
21114
5.84k
        }
21115
79.8k
        p->mark = _mark;
21116
79.8k
        D(fprintf(stderr, "%*c%s expression_without_invalid[%d-%d]: %s failed!\n", p->level, ' ',
21117
79.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction"));
21118
79.8k
    }
21119
0
    { // lambdef
21120
79.8k
        if (p->error_indicator) {
21121
0
            p->call_invalid_rules = _prev_call_invalid;
21122
0
            p->level--;
21123
0
            return NULL;
21124
0
        }
21125
79.8k
        D(fprintf(stderr, "%*c> expression_without_invalid[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambdef"));
21126
79.8k
        expr_ty lambdef_var;
21127
79.8k
        if (
21128
79.8k
            (lambdef_var = lambdef_rule(p))  // lambdef
21129
79.8k
        )
21130
82
        {
21131
82
            D(fprintf(stderr, "%*c+ expression_without_invalid[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambdef"));
21132
82
            _res = lambdef_var;
21133
82
            goto done;
21134
82
        }
21135
79.7k
        p->mark = _mark;
21136
79.7k
        D(fprintf(stderr, "%*c%s expression_without_invalid[%d-%d]: %s failed!\n", p->level, ' ',
21137
79.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambdef"));
21138
79.7k
    }
21139
0
    _res = NULL;
21140
85.7k
  done:
21141
85.7k
    p->call_invalid_rules = _prev_call_invalid;
21142
85.7k
    p->level--;
21143
85.7k
    return _res;
21144
79.7k
}
21145
21146
// invalid_legacy_expression: NAME !'(' star_expressions
21147
static void *
21148
invalid_legacy_expression_rule(Parser *p)
21149
177k
{
21150
177k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
21151
0
        _Pypegen_stack_overflow(p);
21152
0
    }
21153
177k
    if (p->error_indicator) {
21154
0
        p->level--;
21155
0
        return NULL;
21156
0
    }
21157
177k
    void * _res = NULL;
21158
177k
    int _mark = p->mark;
21159
177k
    { // NAME !'(' star_expressions
21160
177k
        if (p->error_indicator) {
21161
0
            p->level--;
21162
0
            return NULL;
21163
0
        }
21164
177k
        D(fprintf(stderr, "%*c> invalid_legacy_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME !'(' star_expressions"));
21165
177k
        expr_ty a;
21166
177k
        expr_ty b;
21167
177k
        if (
21168
177k
            (a = _PyPegen_name_token(p))  // NAME
21169
177k
            &&
21170
177k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 7)  // token='('
21171
177k
            &&
21172
177k
            (b = star_expressions_rule(p))  // star_expressions
21173
177k
        )
21174
3.52k
        {
21175
3.52k
            D(fprintf(stderr, "%*c+ invalid_legacy_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME !'(' star_expressions"));
21176
3.52k
            _res = _PyPegen_check_legacy_stmt ( p , a ) ? RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "Missing parentheses in call to '%U'. Did you mean %U(...)?" , a -> v . Name . id , a -> v . Name . id ) : NULL;
21177
3.52k
            if (_res == NULL && PyErr_Occurred()) {
21178
17
                p->error_indicator = 1;
21179
17
                p->level--;
21180
17
                return NULL;
21181
17
            }
21182
3.50k
            goto done;
21183
3.52k
        }
21184
173k
        p->mark = _mark;
21185
173k
        D(fprintf(stderr, "%*c%s invalid_legacy_expression[%d-%d]: %s failed!\n", p->level, ' ',
21186
173k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME !'(' star_expressions"));
21187
173k
    }
21188
0
    _res = NULL;
21189
177k
  done:
21190
177k
    p->level--;
21191
177k
    return _res;
21192
173k
}
21193
21194
// invalid_type_param: '*' NAME ':' expression | '**' NAME ':' expression
21195
static void *
21196
invalid_type_param_rule(Parser *p)
21197
1.13k
{
21198
1.13k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
21199
0
        _Pypegen_stack_overflow(p);
21200
0
    }
21201
1.13k
    if (p->error_indicator) {
21202
0
        p->level--;
21203
0
        return NULL;
21204
0
    }
21205
1.13k
    void * _res = NULL;
21206
1.13k
    int _mark = p->mark;
21207
1.13k
    { // '*' NAME ':' expression
21208
1.13k
        if (p->error_indicator) {
21209
0
            p->level--;
21210
0
            return NULL;
21211
0
        }
21212
1.13k
        D(fprintf(stderr, "%*c> invalid_type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' NAME ':' expression"));
21213
1.13k
        Token * _literal;
21214
1.13k
        expr_ty a;
21215
1.13k
        Token * colon;
21216
1.13k
        expr_ty e;
21217
1.13k
        if (
21218
1.13k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
21219
1.13k
            &&
21220
1.13k
            (a = _PyPegen_name_token(p))  // NAME
21221
1.13k
            &&
21222
1.13k
            (colon = _PyPegen_expect_token(p, 11))  // token=':'
21223
1.13k
            &&
21224
1.13k
            (e = expression_rule(p))  // expression
21225
1.13k
        )
21226
1
        {
21227
1
            D(fprintf(stderr, "%*c+ invalid_type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' NAME ':' expression"));
21228
1
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( colon , e -> kind == Tuple_kind ? "cannot use constraints with TypeVarTuple" : "cannot use bound with TypeVarTuple" );
21229
1
            if (_res == NULL && PyErr_Occurred()) {
21230
1
                p->error_indicator = 1;
21231
1
                p->level--;
21232
1
                return NULL;
21233
1
            }
21234
0
            goto done;
21235
1
        }
21236
1.13k
        p->mark = _mark;
21237
1.13k
        D(fprintf(stderr, "%*c%s invalid_type_param[%d-%d]: %s failed!\n", p->level, ' ',
21238
1.13k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' NAME ':' expression"));
21239
1.13k
    }
21240
0
    { // '**' NAME ':' expression
21241
1.13k
        if (p->error_indicator) {
21242
1
            p->level--;
21243
1
            return NULL;
21244
1
        }
21245
1.13k
        D(fprintf(stderr, "%*c> invalid_type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' NAME ':' expression"));
21246
1.13k
        Token * _literal;
21247
1.13k
        expr_ty a;
21248
1.13k
        Token * colon;
21249
1.13k
        expr_ty e;
21250
1.13k
        if (
21251
1.13k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
21252
1.13k
            &&
21253
1.13k
            (a = _PyPegen_name_token(p))  // NAME
21254
1.13k
            &&
21255
1.13k
            (colon = _PyPegen_expect_token(p, 11))  // token=':'
21256
1.13k
            &&
21257
1.13k
            (e = expression_rule(p))  // expression
21258
1.13k
        )
21259
1
        {
21260
1
            D(fprintf(stderr, "%*c+ invalid_type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' NAME ':' expression"));
21261
1
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( colon , e -> kind == Tuple_kind ? "cannot use constraints with ParamSpec" : "cannot use bound with ParamSpec" );
21262
1
            if (_res == NULL && PyErr_Occurred()) {
21263
1
                p->error_indicator = 1;
21264
1
                p->level--;
21265
1
                return NULL;
21266
1
            }
21267
0
            goto done;
21268
1
        }
21269
1.13k
        p->mark = _mark;
21270
1.13k
        D(fprintf(stderr, "%*c%s invalid_type_param[%d-%d]: %s failed!\n", p->level, ' ',
21271
1.13k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' NAME ':' expression"));
21272
1.13k
    }
21273
0
    _res = NULL;
21274
1.13k
  done:
21275
1.13k
    p->level--;
21276
1.13k
    return _res;
21277
1.13k
}
21278
21279
// invalid_expression:
21280
//     | STRING ((!STRING expression_without_invalid))+ STRING
21281
//     | !(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid
21282
//     | disjunction 'if' disjunction !('else' | ':')
21283
//     | disjunction 'if' disjunction 'else' !expression
21284
//     | (pass_stmt | break_stmt | continue_stmt) 'if' disjunction 'else' simple_stmt
21285
//     | 'lambda' lambda_params? ':' &FSTRING_MIDDLE
21286
//     | 'lambda' lambda_params? ':' &TSTRING_MIDDLE
21287
static void *
21288
invalid_expression_rule(Parser *p)
21289
206k
{
21290
206k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
21291
1
        _Pypegen_stack_overflow(p);
21292
1
    }
21293
206k
    if (p->error_indicator) {
21294
1
        p->level--;
21295
1
        return NULL;
21296
1
    }
21297
206k
    void * _res = NULL;
21298
206k
    int _mark = p->mark;
21299
206k
    { // STRING ((!STRING expression_without_invalid))+ STRING
21300
206k
        if (p->error_indicator) {
21301
0
            p->level--;
21302
0
            return NULL;
21303
0
        }
21304
206k
        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING ((!STRING expression_without_invalid))+ STRING"));
21305
206k
        asdl_seq * a;
21306
206k
        expr_ty string_var;
21307
206k
        expr_ty string_var_1;
21308
206k
        if (
21309
206k
            (string_var = _PyPegen_string_token(p))  // STRING
21310
206k
            &&
21311
206k
            (a = _loop1_112_rule(p))  // ((!STRING expression_without_invalid))+
21312
206k
            &&
21313
206k
            (string_var_1 = _PyPegen_string_token(p))  // STRING
21314
206k
        )
21315
16
        {
21316
16
            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING ((!STRING expression_without_invalid))+ STRING"));
21317
16
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( PyPegen_first_item ( a , expr_ty ) , PyPegen_last_item ( a , expr_ty ) , "invalid syntax. Is this intended to be part of the string?" );
21318
16
            if (_res == NULL && PyErr_Occurred()) {
21319
16
                p->error_indicator = 1;
21320
16
                p->level--;
21321
16
                return NULL;
21322
16
            }
21323
0
            goto done;
21324
16
        }
21325
206k
        p->mark = _mark;
21326
206k
        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
21327
206k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING ((!STRING expression_without_invalid))+ STRING"));
21328
206k
    }
21329
0
    { // !(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid
21330
206k
        if (p->error_indicator) {
21331
132
            p->level--;
21332
132
            return NULL;
21333
132
        }
21334
206k
        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid"));
21335
206k
        expr_ty a;
21336
206k
        expr_ty b;
21337
206k
        if (
21338
206k
            _PyPegen_lookahead(0, _tmp_113_rule, p)
21339
206k
            &&
21340
206k
            (a = disjunction_rule(p))  // disjunction
21341
206k
            &&
21342
206k
            (b = expression_without_invalid_rule(p))  // expression_without_invalid
21343
206k
        )
21344
4.10k
        {
21345
4.10k
            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid"));
21346
4.10k
            _res = _PyPegen_check_legacy_stmt ( p , a ) ? NULL : p -> tokens [p -> mark - 1] -> level == 0 ? NULL : RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Perhaps you forgot a comma?" );
21347
4.10k
            if (_res == NULL && PyErr_Occurred()) {
21348
135
                p->error_indicator = 1;
21349
135
                p->level--;
21350
135
                return NULL;
21351
135
            }
21352
3.96k
            goto done;
21353
4.10k
        }
21354
202k
        p->mark = _mark;
21355
202k
        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
21356
202k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid"));
21357
202k
    }
21358
0
    { // disjunction 'if' disjunction !('else' | ':')
21359
202k
        if (p->error_indicator) {
21360
26.2k
            p->level--;
21361
26.2k
            return NULL;
21362
26.2k
        }
21363
175k
        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')"));
21364
175k
        Token * _keyword;
21365
175k
        expr_ty a;
21366
175k
        expr_ty b;
21367
175k
        if (
21368
175k
            (a = disjunction_rule(p))  // disjunction
21369
175k
            &&
21370
175k
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
21371
175k
            &&
21372
175k
            (b = disjunction_rule(p))  // disjunction
21373
175k
            &&
21374
175k
            _PyPegen_lookahead(0, _tmp_114_rule, p)
21375
175k
        )
21376
23
        {
21377
23
            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')"));
21378
23
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "expected 'else' after 'if' expression" );
21379
23
            if (_res == NULL && PyErr_Occurred()) {
21380
23
                p->error_indicator = 1;
21381
23
                p->level--;
21382
23
                return NULL;
21383
23
            }
21384
0
            goto done;
21385
23
        }
21386
175k
        p->mark = _mark;
21387
175k
        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
21388
175k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')"));
21389
175k
    }
21390
0
    { // disjunction 'if' disjunction 'else' !expression
21391
175k
        if (p->error_indicator) {
21392
648
            p->level--;
21393
648
            return NULL;
21394
648
        }
21395
175k
        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' !expression"));
21396
175k
        Token * _keyword;
21397
175k
        Token * _keyword_1;
21398
175k
        expr_ty a;
21399
175k
        expr_ty b;
21400
175k
        if (
21401
175k
            (a = disjunction_rule(p))  // disjunction
21402
175k
            &&
21403
175k
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
21404
175k
            &&
21405
175k
            (b = disjunction_rule(p))  // disjunction
21406
175k
            &&
21407
175k
            (_keyword_1 = _PyPegen_expect_token(p, 691))  // token='else'
21408
175k
            &&
21409
175k
            _PyPegen_lookahead_for_expr(0, expression_rule, p)
21410
175k
        )
21411
122
        {
21412
122
            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' !expression"));
21413
122
            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "expected expression after 'else', but statement is given" );
21414
122
            if (_res == NULL && PyErr_Occurred()) {
21415
122
                p->error_indicator = 1;
21416
122
                p->level--;
21417
122
                return NULL;
21418
122
            }
21419
0
            goto done;
21420
122
        }
21421
174k
        p->mark = _mark;
21422
174k
        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
21423
174k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' !expression"));
21424
174k
    }
21425
0
    { // (pass_stmt | break_stmt | continue_stmt) 'if' disjunction 'else' simple_stmt
21426
174k
        if (p->error_indicator) {
21427
0
            p->level--;
21428
0
            return NULL;
21429
0
        }
21430
174k
        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(pass_stmt | break_stmt | continue_stmt) 'if' disjunction 'else' simple_stmt"));
21431
174k
        Token * _keyword;
21432
174k
        Token * _keyword_1;
21433
174k
        stmt_ty a;
21434
174k
        expr_ty b;
21435
174k
        stmt_ty c;
21436
174k
        if (
21437
174k
            (a = (stmt_ty)_tmp_115_rule(p))  // pass_stmt | break_stmt | continue_stmt
21438
174k
            &&
21439
174k
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
21440
174k
            &&
21441
174k
            (b = disjunction_rule(p))  // disjunction
21442
174k
            &&
21443
174k
            (_keyword_1 = _PyPegen_expect_token(p, 691))  // token='else'
21444
174k
            &&
21445
174k
            (c = simple_stmt_rule(p))  // simple_stmt
21446
174k
        )
21447
11
        {
21448
11
            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(pass_stmt | break_stmt | continue_stmt) 'if' disjunction 'else' simple_stmt"));
21449
11
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expected expression before 'if', but statement is given" );
21450
11
            if (_res == NULL && PyErr_Occurred()) {
21451
11
                p->error_indicator = 1;
21452
11
                p->level--;
21453
11
                return NULL;
21454
11
            }
21455
0
            goto done;
21456
11
        }
21457
174k
        p->mark = _mark;
21458
174k
        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
21459
174k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(pass_stmt | break_stmt | continue_stmt) 'if' disjunction 'else' simple_stmt"));
21460
174k
    }
21461
0
    { // 'lambda' lambda_params? ':' &FSTRING_MIDDLE
21462
174k
        if (p->error_indicator) {
21463
1.11k
            p->level--;
21464
1.11k
            return NULL;
21465
1.11k
        }
21466
173k
        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &FSTRING_MIDDLE"));
21467
173k
        void *_opt_var;
21468
173k
        UNUSED(_opt_var); // Silence compiler warnings
21469
173k
        Token * a;
21470
173k
        Token * b;
21471
173k
        if (
21472
173k
            (a = _PyPegen_expect_token(p, 622))  // token='lambda'
21473
173k
            &&
21474
173k
            (_opt_var = lambda_params_rule(p), !p->error_indicator)  // lambda_params?
21475
173k
            &&
21476
173k
            (b = _PyPegen_expect_token(p, 11))  // token=':'
21477
173k
            &&
21478
173k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, FSTRING_MIDDLE)  // token=FSTRING_MIDDLE
21479
173k
        )
21480
2
        {
21481
2
            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &FSTRING_MIDDLE"));
21482
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "f-string: lambda expressions are not allowed without parentheses" );
21483
2
            if (_res == NULL && PyErr_Occurred()) {
21484
2
                p->error_indicator = 1;
21485
2
                p->level--;
21486
2
                return NULL;
21487
2
            }
21488
0
            goto done;
21489
2
        }
21490
173k
        p->mark = _mark;
21491
173k
        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
21492
173k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' &FSTRING_MIDDLE"));
21493
173k
    }
21494
0
    { // 'lambda' lambda_params? ':' &TSTRING_MIDDLE
21495
173k
        if (p->error_indicator) {
21496
723
            p->level--;
21497
723
            return NULL;
21498
723
        }
21499
173k
        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &TSTRING_MIDDLE"));
21500
173k
        void *_opt_var;
21501
173k
        UNUSED(_opt_var); // Silence compiler warnings
21502
173k
        Token * a;
21503
173k
        Token * b;
21504
173k
        if (
21505
173k
            (a = _PyPegen_expect_token(p, 622))  // token='lambda'
21506
173k
            &&
21507
173k
            (_opt_var = lambda_params_rule(p), !p->error_indicator)  // lambda_params?
21508
173k
            &&
21509
173k
            (b = _PyPegen_expect_token(p, 11))  // token=':'
21510
173k
            &&
21511
173k
            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, TSTRING_MIDDLE)  // token=TSTRING_MIDDLE
21512
173k
        )
21513
6
        {
21514
6
            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &TSTRING_MIDDLE"));
21515
6
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "t-string: lambda expressions are not allowed without parentheses" );
21516
6
            if (_res == NULL && PyErr_Occurred()) {
21517
6
                p->error_indicator = 1;
21518
6
                p->level--;
21519
6
                return NULL;
21520
6
            }
21521
0
            goto done;
21522
6
        }
21523
173k
        p->mark = _mark;
21524
173k
        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
21525
173k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' &TSTRING_MIDDLE"));
21526
173k
    }
21527
0
    _res = NULL;
21528
177k
  done:
21529
177k
    p->level--;
21530
177k
    return _res;
21531
173k
}
21532
21533
// invalid_named_expression:
21534
//     | expression ':=' expression
21535
//     | NAME '=' bitwise_or !('=' | ':=')
21536
//     | !(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')
21537
static void *
21538
invalid_named_expression_rule(Parser *p)
21539
227k
{
21540
227k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
21541
0
        _Pypegen_stack_overflow(p);
21542
0
    }
21543
227k
    if (p->error_indicator) {
21544
0
        p->level--;
21545
0
        return NULL;
21546
0
    }
21547
227k
    void * _res = NULL;
21548
227k
    if (_PyPegen_is_memoized(p, invalid_named_expression_type, &_res)) {
21549
135k
        p->level--;
21550
135k
        return _res;
21551
135k
    }
21552
91.9k
    int _mark = p->mark;
21553
91.9k
    { // expression ':=' expression
21554
91.9k
        if (p->error_indicator) {
21555
0
            p->level--;
21556
0
            return NULL;
21557
0
        }
21558
91.9k
        D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':=' expression"));
21559
91.9k
        Token * _literal;
21560
91.9k
        expr_ty a;
21561
91.9k
        expr_ty expression_var;
21562
91.9k
        if (
21563
91.9k
            (a = expression_rule(p))  // expression
21564
91.9k
            &&
21565
91.9k
            (_literal = _PyPegen_expect_token(p, 53))  // token=':='
21566
91.9k
            &&
21567
91.9k
            (expression_var = expression_rule(p))  // expression
21568
91.9k
        )
21569
2
        {
21570
2
            D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':=' expression"));
21571
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use assignment expressions with %s" , _PyPegen_get_expr_name ( a ) );
21572
2
            if (_res == NULL && PyErr_Occurred()) {
21573
2
                p->error_indicator = 1;
21574
2
                p->level--;
21575
2
                return NULL;
21576
2
            }
21577
0
            goto done;
21578
2
        }
21579
91.9k
        p->mark = _mark;
21580
91.9k
        D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
21581
91.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':=' expression"));
21582
91.9k
    }
21583
0
    { // NAME '=' bitwise_or !('=' | ':=')
21584
91.9k
        if (p->error_indicator) {
21585
13.8k
            p->level--;
21586
13.8k
            return NULL;
21587
13.8k
        }
21588
78.1k
        D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')"));
21589
78.1k
        Token * _literal;
21590
78.1k
        expr_ty a;
21591
78.1k
        expr_ty b;
21592
78.1k
        if (
21593
78.1k
            (a = _PyPegen_name_token(p))  // NAME
21594
78.1k
            &&
21595
78.1k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
21596
78.1k
            &&
21597
78.1k
            (b = bitwise_or_rule(p))  // bitwise_or
21598
78.1k
            &&
21599
78.1k
            _PyPegen_lookahead(0, _tmp_116_rule, p)
21600
78.1k
        )
21601
10
        {
21602
10
            D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')"));
21603
10
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" );
21604
10
            if (_res == NULL && PyErr_Occurred()) {
21605
10
                p->error_indicator = 1;
21606
10
                p->level--;
21607
10
                return NULL;
21608
10
            }
21609
0
            goto done;
21610
10
        }
21611
78.1k
        p->mark = _mark;
21612
78.1k
        D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
21613
78.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')"));
21614
78.1k
    }
21615
0
    { // !(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')
21616
78.1k
        if (p->error_indicator) {
21617
267
            p->level--;
21618
267
            return NULL;
21619
267
        }
21620
77.8k
        D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')"));
21621
77.8k
        expr_ty a;
21622
77.8k
        Token * b;
21623
77.8k
        expr_ty bitwise_or_var;
21624
77.8k
        if (
21625
77.8k
            _PyPegen_lookahead(0, _tmp_117_rule, p)
21626
77.8k
            &&
21627
77.8k
            (a = bitwise_or_rule(p))  // bitwise_or
21628
77.8k
            &&
21629
77.8k
            (b = _PyPegen_expect_token(p, 22))  // token='='
21630
77.8k
            &&
21631
77.8k
            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
21632
77.8k
            &&
21633
77.8k
            _PyPegen_lookahead(0, _tmp_116_rule, p)
21634
77.8k
        )
21635
12
        {
21636
12
            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 !('=' | ':=')"));
21637
12
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot assign to %s here. Maybe you meant '==' instead of '='?" , _PyPegen_get_expr_name ( a ) );
21638
12
            if (_res == NULL && PyErr_Occurred()) {
21639
12
                p->error_indicator = 1;
21640
12
                p->level--;
21641
12
                return NULL;
21642
12
            }
21643
0
            goto done;
21644
12
        }
21645
77.8k
        p->mark = _mark;
21646
77.8k
        D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
21647
77.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')"));
21648
77.8k
    }
21649
0
    _res = NULL;
21650
77.8k
  done:
21651
77.8k
    _PyPegen_insert_memo(p, _mark, invalid_named_expression_type, _res);
21652
77.8k
    p->level--;
21653
77.8k
    return _res;
21654
77.8k
}
21655
21656
// invalid_assignment:
21657
//     | invalid_ann_assign_target ':' expression
21658
//     | star_named_expression ',' star_named_expressions* ':' expression
21659
//     | expression ':' expression
21660
//     | ((star_targets '='))* star_expressions '='
21661
//     | ((star_targets '='))* yield_expr '='
21662
//     | star_expressions augassign annotated_rhs
21663
static void *
21664
invalid_assignment_rule(Parser *p)
21665
35.8k
{
21666
35.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
21667
0
        _Pypegen_stack_overflow(p);
21668
0
    }
21669
35.8k
    if (p->error_indicator) {
21670
0
        p->level--;
21671
0
        return NULL;
21672
0
    }
21673
35.8k
    void * _res = NULL;
21674
35.8k
    int _mark = p->mark;
21675
35.8k
    { // invalid_ann_assign_target ':' expression
21676
35.8k
        if (p->error_indicator) {
21677
0
            p->level--;
21678
0
            return NULL;
21679
0
        }
21680
35.8k
        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_ann_assign_target ':' expression"));
21681
35.8k
        Token * _literal;
21682
35.8k
        expr_ty a;
21683
35.8k
        expr_ty expression_var;
21684
35.8k
        if (
21685
35.8k
            (a = invalid_ann_assign_target_rule(p))  // invalid_ann_assign_target
21686
35.8k
            &&
21687
35.8k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
21688
35.8k
            &&
21689
35.8k
            (expression_var = expression_rule(p))  // expression
21690
35.8k
        )
21691
3
        {
21692
3
            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_ann_assign_target ':' expression"));
21693
3
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "only single target (not %s) can be annotated" , _PyPegen_get_expr_name ( a ) );
21694
3
            if (_res == NULL && PyErr_Occurred()) {
21695
3
                p->error_indicator = 1;
21696
3
                p->level--;
21697
3
                return NULL;
21698
3
            }
21699
0
            goto done;
21700
3
        }
21701
35.8k
        p->mark = _mark;
21702
35.8k
        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
21703
35.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_ann_assign_target ':' expression"));
21704
35.8k
    }
21705
0
    { // star_named_expression ',' star_named_expressions* ':' expression
21706
35.8k
        if (p->error_indicator) {
21707
46
            p->level--;
21708
46
            return NULL;
21709
46
        }
21710
35.8k
        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
21711
35.8k
        Token * _literal;
21712
35.8k
        Token * _literal_1;
21713
35.8k
        asdl_seq * _loop0_118_var;
21714
35.8k
        expr_ty a;
21715
35.8k
        expr_ty expression_var;
21716
35.8k
        if (
21717
35.8k
            (a = star_named_expression_rule(p))  // star_named_expression
21718
35.8k
            &&
21719
35.8k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
21720
35.8k
            &&
21721
35.8k
            (_loop0_118_var = _loop0_118_rule(p))  // star_named_expressions*
21722
35.8k
            &&
21723
35.8k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
21724
35.8k
            &&
21725
35.8k
            (expression_var = expression_rule(p))  // expression
21726
35.8k
        )
21727
12
        {
21728
12
            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
21729
12
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "only single target (not tuple) can be annotated" );
21730
12
            if (_res == NULL && PyErr_Occurred()) {
21731
12
                p->error_indicator = 1;
21732
12
                p->level--;
21733
12
                return NULL;
21734
12
            }
21735
0
            goto done;
21736
12
        }
21737
35.7k
        p->mark = _mark;
21738
35.7k
        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
21739
35.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
21740
35.7k
    }
21741
0
    { // expression ':' expression
21742
35.7k
        if (p->error_indicator) {
21743
781
            p->level--;
21744
781
            return NULL;
21745
781
        }
21746
35.0k
        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
21747
35.0k
        Token * _literal;
21748
35.0k
        expr_ty a;
21749
35.0k
        expr_ty expression_var;
21750
35.0k
        if (
21751
35.0k
            (a = expression_rule(p))  // expression
21752
35.0k
            &&
21753
35.0k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
21754
35.0k
            &&
21755
35.0k
            (expression_var = expression_rule(p))  // expression
21756
35.0k
        )
21757
33
        {
21758
33
            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
21759
33
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "illegal target for annotation" );
21760
33
            if (_res == NULL && PyErr_Occurred()) {
21761
33
                p->error_indicator = 1;
21762
33
                p->level--;
21763
33
                return NULL;
21764
33
            }
21765
0
            goto done;
21766
33
        }
21767
34.9k
        p->mark = _mark;
21768
34.9k
        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
21769
34.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' expression"));
21770
34.9k
    }
21771
0
    { // ((star_targets '='))* star_expressions '='
21772
34.9k
        if (p->error_indicator) {
21773
104
            p->level--;
21774
104
            return NULL;
21775
104
        }
21776
34.8k
        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='"));
21777
34.8k
        Token * _literal;
21778
34.8k
        asdl_seq * _loop0_119_var;
21779
34.8k
        expr_ty a;
21780
34.8k
        if (
21781
34.8k
            (_loop0_119_var = _loop0_119_rule(p))  // ((star_targets '='))*
21782
34.8k
            &&
21783
34.8k
            (a = star_expressions_rule(p))  // star_expressions
21784
34.8k
            &&
21785
34.8k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
21786
34.8k
        )
21787
91
        {
21788
91
            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='"));
21789
91
            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( STAR_TARGETS , a );
21790
91
            if (_res == NULL && PyErr_Occurred()) {
21791
91
                p->error_indicator = 1;
21792
91
                p->level--;
21793
91
                return NULL;
21794
91
            }
21795
0
            goto done;
21796
91
        }
21797
34.7k
        p->mark = _mark;
21798
34.7k
        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
21799
34.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))* star_expressions '='"));
21800
34.7k
    }
21801
0
    { // ((star_targets '='))* yield_expr '='
21802
34.7k
        if (p->error_indicator) {
21803
0
            p->level--;
21804
0
            return NULL;
21805
0
        }
21806
34.7k
        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='"));
21807
34.7k
        Token * _literal;
21808
34.7k
        asdl_seq * _loop0_119_var;
21809
34.7k
        expr_ty a;
21810
34.7k
        if (
21811
34.7k
            (_loop0_119_var = _loop0_119_rule(p))  // ((star_targets '='))*
21812
34.7k
            &&
21813
34.7k
            (a = yield_expr_rule(p))  // yield_expr
21814
34.7k
            &&
21815
34.7k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
21816
34.7k
        )
21817
2
        {
21818
2
            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='"));
21819
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "assignment to yield expression not possible" );
21820
2
            if (_res == NULL && PyErr_Occurred()) {
21821
2
                p->error_indicator = 1;
21822
2
                p->level--;
21823
2
                return NULL;
21824
2
            }
21825
0
            goto done;
21826
2
        }
21827
34.7k
        p->mark = _mark;
21828
34.7k
        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
21829
34.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))* yield_expr '='"));
21830
34.7k
    }
21831
0
    { // star_expressions augassign annotated_rhs
21832
34.7k
        if (p->error_indicator) {
21833
70
            p->level--;
21834
70
            return NULL;
21835
70
        }
21836
34.7k
        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions augassign annotated_rhs"));
21837
34.7k
        expr_ty a;
21838
34.7k
        expr_ty annotated_rhs_var;
21839
34.7k
        AugOperator* augassign_var;
21840
34.7k
        if (
21841
34.7k
            (a = star_expressions_rule(p))  // star_expressions
21842
34.7k
            &&
21843
34.7k
            (augassign_var = augassign_rule(p))  // augassign
21844
34.7k
            &&
21845
34.7k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
21846
34.7k
        )
21847
20
        {
21848
20
            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions augassign annotated_rhs"));
21849
20
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "'%s' is an illegal expression for augmented assignment" , _PyPegen_get_expr_name ( a ) );
21850
20
            if (_res == NULL && PyErr_Occurred()) {
21851
20
                p->error_indicator = 1;
21852
20
                p->level--;
21853
20
                return NULL;
21854
20
            }
21855
0
            goto done;
21856
20
        }
21857
34.6k
        p->mark = _mark;
21858
34.6k
        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
21859
34.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions augassign annotated_rhs"));
21860
34.6k
    }
21861
0
    _res = NULL;
21862
34.6k
  done:
21863
34.6k
    p->level--;
21864
34.6k
    return _res;
21865
34.6k
}
21866
21867
// invalid_ann_assign_target: list | tuple | '(' invalid_ann_assign_target ')'
21868
static expr_ty
21869
invalid_ann_assign_target_rule(Parser *p)
21870
37.4k
{
21871
37.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
21872
0
        _Pypegen_stack_overflow(p);
21873
0
    }
21874
37.4k
    if (p->error_indicator) {
21875
0
        p->level--;
21876
0
        return NULL;
21877
0
    }
21878
37.4k
    expr_ty _res = NULL;
21879
37.4k
    int _mark = p->mark;
21880
37.4k
    { // list
21881
37.4k
        if (p->error_indicator) {
21882
0
            p->level--;
21883
0
            return NULL;
21884
0
        }
21885
37.4k
        D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
21886
37.4k
        expr_ty list_var;
21887
37.4k
        if (
21888
37.4k
            (list_var = list_rule(p))  // list
21889
37.4k
        )
21890
94
        {
21891
94
            D(fprintf(stderr, "%*c+ invalid_ann_assign_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list"));
21892
94
            _res = list_var;
21893
94
            goto done;
21894
94
        }
21895
37.3k
        p->mark = _mark;
21896
37.3k
        D(fprintf(stderr, "%*c%s invalid_ann_assign_target[%d-%d]: %s failed!\n", p->level, ' ',
21897
37.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list"));
21898
37.3k
    }
21899
0
    { // tuple
21900
37.3k
        if (p->error_indicator) {
21901
0
            p->level--;
21902
0
            return NULL;
21903
0
        }
21904
37.3k
        D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
21905
37.3k
        expr_ty tuple_var;
21906
37.3k
        if (
21907
37.3k
            (tuple_var = tuple_rule(p))  // tuple
21908
37.3k
        )
21909
449
        {
21910
449
            D(fprintf(stderr, "%*c+ invalid_ann_assign_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple"));
21911
449
            _res = tuple_var;
21912
449
            goto done;
21913
449
        }
21914
36.9k
        p->mark = _mark;
21915
36.9k
        D(fprintf(stderr, "%*c%s invalid_ann_assign_target[%d-%d]: %s failed!\n", p->level, ' ',
21916
36.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple"));
21917
36.9k
    }
21918
0
    { // '(' invalid_ann_assign_target ')'
21919
36.9k
        if (p->error_indicator) {
21920
0
            p->level--;
21921
0
            return NULL;
21922
0
        }
21923
36.9k
        D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
21924
36.9k
        Token * _literal;
21925
36.9k
        Token * _literal_1;
21926
36.9k
        expr_ty a;
21927
36.9k
        if (
21928
36.9k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
21929
36.9k
            &&
21930
36.9k
            (a = invalid_ann_assign_target_rule(p))  // invalid_ann_assign_target
21931
36.9k
            &&
21932
36.9k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
21933
36.9k
        )
21934
301
        {
21935
301
            D(fprintf(stderr, "%*c+ invalid_ann_assign_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
21936
301
            _res = a;
21937
301
            if (_res == NULL && PyErr_Occurred()) {
21938
0
                p->error_indicator = 1;
21939
0
                p->level--;
21940
0
                return NULL;
21941
0
            }
21942
301
            goto done;
21943
301
        }
21944
36.6k
        p->mark = _mark;
21945
36.6k
        D(fprintf(stderr, "%*c%s invalid_ann_assign_target[%d-%d]: %s failed!\n", p->level, ' ',
21946
36.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
21947
36.6k
    }
21948
0
    _res = NULL;
21949
37.4k
  done:
21950
37.4k
    p->level--;
21951
37.4k
    return _res;
21952
36.6k
}
21953
21954
// invalid_raise_stmt: 'raise' 'from' | 'raise' expression 'from'
21955
static void *
21956
invalid_raise_stmt_rule(Parser *p)
21957
593
{
21958
593
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
21959
0
        _Pypegen_stack_overflow(p);
21960
0
    }
21961
593
    if (p->error_indicator) {
21962
0
        p->level--;
21963
0
        return NULL;
21964
0
    }
21965
593
    void * _res = NULL;
21966
593
    int _mark = p->mark;
21967
593
    { // 'raise' 'from'
21968
593
        if (p->error_indicator) {
21969
0
            p->level--;
21970
0
            return NULL;
21971
0
        }
21972
593
        D(fprintf(stderr, "%*c> invalid_raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' 'from'"));
21973
593
        Token * a;
21974
593
        Token * b;
21975
593
        if (
21976
593
            (a = _PyPegen_expect_token(p, 628))  // token='raise'
21977
593
            &&
21978
593
            (b = _PyPegen_expect_token(p, 638))  // token='from'
21979
593
        )
21980
1
        {
21981
1
            D(fprintf(stderr, "%*c+ invalid_raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' 'from'"));
21982
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "did you forget an expression between 'raise' and 'from'?" );
21983
1
            if (_res == NULL && PyErr_Occurred()) {
21984
1
                p->error_indicator = 1;
21985
1
                p->level--;
21986
1
                return NULL;
21987
1
            }
21988
0
            goto done;
21989
1
        }
21990
592
        p->mark = _mark;
21991
592
        D(fprintf(stderr, "%*c%s invalid_raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
21992
592
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' 'from'"));
21993
592
    }
21994
0
    { // 'raise' expression 'from'
21995
592
        if (p->error_indicator) {
21996
0
            p->level--;
21997
0
            return NULL;
21998
0
        }
21999
592
        D(fprintf(stderr, "%*c> invalid_raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression 'from'"));
22000
592
        Token * _keyword;
22001
592
        Token * a;
22002
592
        expr_ty expression_var;
22003
592
        if (
22004
592
            (_keyword = _PyPegen_expect_token(p, 628))  // token='raise'
22005
592
            &&
22006
592
            (expression_var = expression_rule(p))  // expression
22007
592
            &&
22008
592
            (a = _PyPegen_expect_token(p, 638))  // token='from'
22009
592
        )
22010
2
        {
22011
2
            D(fprintf(stderr, "%*c+ invalid_raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression 'from'"));
22012
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "did you forget an expression after 'from'?" );
22013
2
            if (_res == NULL && PyErr_Occurred()) {
22014
2
                p->error_indicator = 1;
22015
2
                p->level--;
22016
2
                return NULL;
22017
2
            }
22018
0
            goto done;
22019
2
        }
22020
590
        p->mark = _mark;
22021
590
        D(fprintf(stderr, "%*c%s invalid_raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
22022
590
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' expression 'from'"));
22023
590
    }
22024
0
    _res = NULL;
22025
590
  done:
22026
590
    p->level--;
22027
590
    return _res;
22028
590
}
22029
22030
// invalid_del_stmt: 'del' star_expressions
22031
static void *
22032
invalid_del_stmt_rule(Parser *p)
22033
285
{
22034
285
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22035
0
        _Pypegen_stack_overflow(p);
22036
0
    }
22037
285
    if (p->error_indicator) {
22038
0
        p->level--;
22039
0
        return NULL;
22040
0
    }
22041
285
    void * _res = NULL;
22042
285
    int _mark = p->mark;
22043
285
    { // 'del' star_expressions
22044
285
        if (p->error_indicator) {
22045
0
            p->level--;
22046
0
            return NULL;
22047
0
        }
22048
285
        D(fprintf(stderr, "%*c> invalid_del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'del' star_expressions"));
22049
285
        Token * _keyword;
22050
285
        expr_ty a;
22051
285
        if (
22052
285
            (_keyword = _PyPegen_expect_token(p, 630))  // token='del'
22053
285
            &&
22054
285
            (a = star_expressions_rule(p))  // star_expressions
22055
285
        )
22056
147
        {
22057
147
            D(fprintf(stderr, "%*c+ invalid_del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' star_expressions"));
22058
147
            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( DEL_TARGETS , a );
22059
147
            if (_res == NULL && PyErr_Occurred()) {
22060
11
                p->error_indicator = 1;
22061
11
                p->level--;
22062
11
                return NULL;
22063
11
            }
22064
136
            goto done;
22065
147
        }
22066
138
        p->mark = _mark;
22067
138
        D(fprintf(stderr, "%*c%s invalid_del_stmt[%d-%d]: %s failed!\n", p->level, ' ',
22068
138
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'del' star_expressions"));
22069
138
    }
22070
0
    _res = NULL;
22071
274
  done:
22072
274
    p->level--;
22073
274
    return _res;
22074
138
}
22075
22076
// invalid_block: NEWLINE !INDENT
22077
static void *
22078
invalid_block_rule(Parser *p)
22079
2.00k
{
22080
2.00k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22081
0
        _Pypegen_stack_overflow(p);
22082
0
    }
22083
2.00k
    if (p->error_indicator) {
22084
0
        p->level--;
22085
0
        return NULL;
22086
0
    }
22087
2.00k
    void * _res = NULL;
22088
2.00k
    int _mark = p->mark;
22089
2.00k
    { // NEWLINE !INDENT
22090
2.00k
        if (p->error_indicator) {
22091
0
            p->level--;
22092
0
            return NULL;
22093
0
        }
22094
2.00k
        D(fprintf(stderr, "%*c> invalid_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE !INDENT"));
22095
2.00k
        Token * newline_var;
22096
2.00k
        if (
22097
2.00k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
22098
2.00k
            &&
22099
2.00k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
22100
2.00k
        )
22101
5
        {
22102
5
            D(fprintf(stderr, "%*c+ invalid_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE !INDENT"));
22103
5
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block" );
22104
5
            if (_res == NULL && PyErr_Occurred()) {
22105
5
                p->error_indicator = 1;
22106
5
                p->level--;
22107
5
                return NULL;
22108
5
            }
22109
0
            goto done;
22110
5
        }
22111
1.99k
        p->mark = _mark;
22112
1.99k
        D(fprintf(stderr, "%*c%s invalid_block[%d-%d]: %s failed!\n", p->level, ' ',
22113
1.99k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE !INDENT"));
22114
1.99k
    }
22115
0
    _res = NULL;
22116
1.99k
  done:
22117
1.99k
    p->level--;
22118
1.99k
    return _res;
22119
1.99k
}
22120
22121
// invalid_comprehension:
22122
//     | ('[' | '(' | '{') starred_expression for_if_clauses
22123
//     | ('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses
22124
//     | ('[' | '{') star_named_expression ',' for_if_clauses
22125
static void *
22126
invalid_comprehension_rule(Parser *p)
22127
204k
{
22128
204k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22129
1
        _Pypegen_stack_overflow(p);
22130
1
    }
22131
204k
    if (p->error_indicator) {
22132
1
        p->level--;
22133
1
        return NULL;
22134
1
    }
22135
204k
    void * _res = NULL;
22136
204k
    int _mark = p->mark;
22137
204k
    { // ('[' | '(' | '{') starred_expression for_if_clauses
22138
204k
        if (p->error_indicator) {
22139
0
            p->level--;
22140
0
            return NULL;
22141
0
        }
22142
204k
        D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses"));
22143
204k
        void *_tmp_120_var;
22144
204k
        expr_ty a;
22145
204k
        asdl_comprehension_seq* for_if_clauses_var;
22146
204k
        if (
22147
204k
            (_tmp_120_var = _tmp_120_rule(p))  // '[' | '(' | '{'
22148
204k
            &&
22149
204k
            (a = starred_expression_rule(p))  // starred_expression
22150
204k
            &&
22151
204k
            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
22152
204k
        )
22153
2
        {
22154
2
            D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses"));
22155
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "iterable unpacking cannot be used in comprehension" );
22156
2
            if (_res == NULL && PyErr_Occurred()) {
22157
2
                p->error_indicator = 1;
22158
2
                p->level--;
22159
2
                return NULL;
22160
2
            }
22161
0
            goto done;
22162
2
        }
22163
204k
        p->mark = _mark;
22164
204k
        D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
22165
204k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses"));
22166
204k
    }
22167
0
    { // ('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses
22168
204k
        if (p->error_indicator) {
22169
625
            p->level--;
22170
625
            return NULL;
22171
625
        }
22172
204k
        D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses"));
22173
204k
        Token * _literal;
22174
204k
        void *_tmp_121_var;
22175
204k
        expr_ty a;
22176
204k
        asdl_expr_seq* b;
22177
204k
        asdl_comprehension_seq* for_if_clauses_var;
22178
204k
        if (
22179
204k
            (_tmp_121_var = _tmp_121_rule(p))  // '[' | '{'
22180
204k
            &&
22181
204k
            (a = star_named_expression_rule(p))  // star_named_expression
22182
204k
            &&
22183
204k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
22184
204k
            &&
22185
204k
            (b = star_named_expressions_rule(p))  // star_named_expressions
22186
204k
            &&
22187
204k
            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
22188
204k
        )
22189
1
        {
22190
1
            D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses"));
22191
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , PyPegen_last_item ( b , expr_ty ) , "did you forget parentheses around the comprehension target?" );
22192
1
            if (_res == NULL && PyErr_Occurred()) {
22193
1
                p->error_indicator = 1;
22194
1
                p->level--;
22195
1
                return NULL;
22196
1
            }
22197
0
            goto done;
22198
1
        }
22199
204k
        p->mark = _mark;
22200
204k
        D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
22201
204k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses"));
22202
204k
    }
22203
0
    { // ('[' | '{') star_named_expression ',' for_if_clauses
22204
204k
        if (p->error_indicator) {
22205
1.57k
            p->level--;
22206
1.57k
            return NULL;
22207
1.57k
        }
22208
202k
        D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses"));
22209
202k
        void *_tmp_121_var;
22210
202k
        expr_ty a;
22211
202k
        Token * b;
22212
202k
        asdl_comprehension_seq* for_if_clauses_var;
22213
202k
        if (
22214
202k
            (_tmp_121_var = _tmp_121_rule(p))  // '[' | '{'
22215
202k
            &&
22216
202k
            (a = star_named_expression_rule(p))  // star_named_expression
22217
202k
            &&
22218
202k
            (b = _PyPegen_expect_token(p, 12))  // token=','
22219
202k
            &&
22220
202k
            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
22221
202k
        )
22222
1
        {
22223
1
            D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses"));
22224
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "did you forget parentheses around the comprehension target?" );
22225
1
            if (_res == NULL && PyErr_Occurred()) {
22226
1
                p->error_indicator = 1;
22227
1
                p->level--;
22228
1
                return NULL;
22229
1
            }
22230
0
            goto done;
22231
1
        }
22232
202k
        p->mark = _mark;
22233
202k
        D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
22234
202k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses"));
22235
202k
    }
22236
0
    _res = NULL;
22237
202k
  done:
22238
202k
    p->level--;
22239
202k
    return _res;
22240
202k
}
22241
22242
// invalid_dict_comprehension: '{' '**' bitwise_or for_if_clauses '}'
22243
static void *
22244
invalid_dict_comprehension_rule(Parser *p)
22245
3.48k
{
22246
3.48k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22247
0
        _Pypegen_stack_overflow(p);
22248
0
    }
22249
3.48k
    if (p->error_indicator) {
22250
0
        p->level--;
22251
0
        return NULL;
22252
0
    }
22253
3.48k
    void * _res = NULL;
22254
3.48k
    int _mark = p->mark;
22255
3.48k
    { // '{' '**' bitwise_or for_if_clauses '}'
22256
3.48k
        if (p->error_indicator) {
22257
0
            p->level--;
22258
0
            return NULL;
22259
0
        }
22260
3.48k
        D(fprintf(stderr, "%*c> invalid_dict_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '**' bitwise_or for_if_clauses '}'"));
22261
3.48k
        Token * _literal;
22262
3.48k
        Token * _literal_1;
22263
3.48k
        Token * a;
22264
3.48k
        expr_ty bitwise_or_var;
22265
3.48k
        asdl_comprehension_seq* for_if_clauses_var;
22266
3.48k
        if (
22267
3.48k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
22268
3.48k
            &&
22269
3.48k
            (a = _PyPegen_expect_token(p, 35))  // token='**'
22270
3.48k
            &&
22271
3.48k
            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
22272
3.48k
            &&
22273
3.48k
            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
22274
3.48k
            &&
22275
3.48k
            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
22276
3.48k
        )
22277
1
        {
22278
1
            D(fprintf(stderr, "%*c+ invalid_dict_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '**' bitwise_or for_if_clauses '}'"));
22279
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "dict unpacking cannot be used in dict comprehension" );
22280
1
            if (_res == NULL && PyErr_Occurred()) {
22281
1
                p->error_indicator = 1;
22282
1
                p->level--;
22283
1
                return NULL;
22284
1
            }
22285
0
            goto done;
22286
1
        }
22287
3.48k
        p->mark = _mark;
22288
3.48k
        D(fprintf(stderr, "%*c%s invalid_dict_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
22289
3.48k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '**' bitwise_or for_if_clauses '}'"));
22290
3.48k
    }
22291
0
    _res = NULL;
22292
3.48k
  done:
22293
3.48k
    p->level--;
22294
3.48k
    return _res;
22295
3.48k
}
22296
22297
// invalid_parameters:
22298
//     | "/" ','
22299
//     | (slash_no_default | slash_with_default) param_maybe_default* '/'
22300
//     | slash_no_default? param_no_default* invalid_parameters_helper param_no_default
22301
//     | param_no_default* '(' param_no_default+ ','? ')'
22302
//     | [(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'
22303
//     | param_maybe_default+ '/' '*'
22304
static void *
22305
invalid_parameters_rule(Parser *p)
22306
4.32k
{
22307
4.32k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22308
0
        _Pypegen_stack_overflow(p);
22309
0
    }
22310
4.32k
    if (p->error_indicator) {
22311
0
        p->level--;
22312
0
        return NULL;
22313
0
    }
22314
4.32k
    void * _res = NULL;
22315
4.32k
    int _mark = p->mark;
22316
4.32k
    { // "/" ','
22317
4.32k
        if (p->error_indicator) {
22318
0
            p->level--;
22319
0
            return NULL;
22320
0
        }
22321
4.32k
        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
22322
4.32k
        Token * _literal;
22323
4.32k
        Token * a;
22324
4.32k
        if (
22325
4.32k
            (a = _PyPegen_expect_token(p, 17))  // token='/'
22326
4.32k
            &&
22327
4.32k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
22328
4.32k
        )
22329
1
        {
22330
1
            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
22331
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "at least one parameter must precede /" );
22332
1
            if (_res == NULL && PyErr_Occurred()) {
22333
1
                p->error_indicator = 1;
22334
1
                p->level--;
22335
1
                return NULL;
22336
1
            }
22337
0
            goto done;
22338
1
        }
22339
4.32k
        p->mark = _mark;
22340
4.32k
        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22341
4.32k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"/\" ','"));
22342
4.32k
    }
22343
0
    { // (slash_no_default | slash_with_default) param_maybe_default* '/'
22344
4.32k
        if (p->error_indicator) {
22345
1
            p->level--;
22346
1
            return NULL;
22347
1
        }
22348
4.32k
        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slash_no_default | slash_with_default) param_maybe_default* '/'"));
22349
4.32k
        asdl_seq * _loop0_31_var;
22350
4.32k
        void *_tmp_122_var;
22351
4.32k
        Token * a;
22352
4.32k
        if (
22353
4.32k
            (_tmp_122_var = _tmp_122_rule(p))  // slash_no_default | slash_with_default
22354
4.32k
            &&
22355
4.32k
            (_loop0_31_var = _loop0_31_rule(p))  // param_maybe_default*
22356
4.32k
            &&
22357
4.32k
            (a = _PyPegen_expect_token(p, 17))  // token='/'
22358
4.32k
        )
22359
1
        {
22360
1
            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(slash_no_default | slash_with_default) param_maybe_default* '/'"));
22361
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "/ may appear only once" );
22362
1
            if (_res == NULL && PyErr_Occurred()) {
22363
1
                p->error_indicator = 1;
22364
1
                p->level--;
22365
1
                return NULL;
22366
1
            }
22367
0
            goto done;
22368
1
        }
22369
4.32k
        p->mark = _mark;
22370
4.32k
        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22371
4.32k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(slash_no_default | slash_with_default) param_maybe_default* '/'"));
22372
4.32k
    }
22373
0
    { // slash_no_default? param_no_default* invalid_parameters_helper param_no_default
22374
4.32k
        if (p->error_indicator) {
22375
6
            p->level--;
22376
6
            return NULL;
22377
6
        }
22378
4.31k
        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"));
22379
4.31k
        asdl_seq * _loop0_27_var;
22380
4.31k
        void *_opt_var;
22381
4.31k
        UNUSED(_opt_var); // Silence compiler warnings
22382
4.31k
        arg_ty a;
22383
4.31k
        void *invalid_parameters_helper_var;
22384
4.31k
        if (
22385
4.31k
            (_opt_var = slash_no_default_rule(p), !p->error_indicator)  // slash_no_default?
22386
4.31k
            &&
22387
4.31k
            (_loop0_27_var = _loop0_27_rule(p))  // param_no_default*
22388
4.31k
            &&
22389
4.31k
            (invalid_parameters_helper_var = invalid_parameters_helper_rule(p))  // invalid_parameters_helper
22390
4.31k
            &&
22391
4.31k
            (a = param_no_default_rule(p))  // param_no_default
22392
4.31k
        )
22393
3
        {
22394
3
            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default? param_no_default* invalid_parameters_helper param_no_default"));
22395
3
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameter without a default follows parameter with a default" );
22396
3
            if (_res == NULL && PyErr_Occurred()) {
22397
3
                p->error_indicator = 1;
22398
3
                p->level--;
22399
3
                return NULL;
22400
3
            }
22401
0
            goto done;
22402
3
        }
22403
4.31k
        p->mark = _mark;
22404
4.31k
        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22405
4.31k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default? param_no_default* invalid_parameters_helper param_no_default"));
22406
4.31k
    }
22407
0
    { // param_no_default* '(' param_no_default+ ','? ')'
22408
4.31k
        if (p->error_indicator) {
22409
1
            p->level--;
22410
1
            return NULL;
22411
1
        }
22412
4.31k
        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* '(' param_no_default+ ','? ')'"));
22413
4.31k
        asdl_seq * _loop0_27_var;
22414
4.31k
        asdl_seq * _loop1_29_var;
22415
4.31k
        void *_opt_var;
22416
4.31k
        UNUSED(_opt_var); // Silence compiler warnings
22417
4.31k
        Token * a;
22418
4.31k
        Token * b;
22419
4.31k
        if (
22420
4.31k
            (_loop0_27_var = _loop0_27_rule(p))  // param_no_default*
22421
4.31k
            &&
22422
4.31k
            (a = _PyPegen_expect_token(p, 7))  // token='('
22423
4.31k
            &&
22424
4.31k
            (_loop1_29_var = _loop1_29_rule(p))  // param_no_default+
22425
4.31k
            &&
22426
4.31k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
22427
4.31k
            &&
22428
4.31k
            (b = _PyPegen_expect_token(p, 8))  // token=')'
22429
4.31k
        )
22430
1
        {
22431
1
            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* '(' param_no_default+ ','? ')'"));
22432
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "Function parameters cannot be parenthesized" );
22433
1
            if (_res == NULL && PyErr_Occurred()) {
22434
1
                p->error_indicator = 1;
22435
1
                p->level--;
22436
1
                return NULL;
22437
1
            }
22438
0
            goto done;
22439
1
        }
22440
4.31k
        p->mark = _mark;
22441
4.31k
        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22442
4.31k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* '(' param_no_default+ ','? ')'"));
22443
4.31k
    }
22444
0
    { // [(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'
22445
4.31k
        if (p->error_indicator) {
22446
4
            p->level--;
22447
4
            return NULL;
22448
4
        }
22449
4.30k
        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* '/'"));
22450
4.30k
        Token * _literal;
22451
4.30k
        asdl_seq * _loop0_31_var;
22452
4.30k
        asdl_seq * _loop0_31_var_1;
22453
4.30k
        void *_opt_var;
22454
4.30k
        UNUSED(_opt_var); // Silence compiler warnings
22455
4.30k
        void *_tmp_123_var;
22456
4.30k
        Token * a;
22457
4.30k
        if (
22458
4.30k
            (_opt_var = _tmp_122_rule(p), !p->error_indicator)  // [(slash_no_default | slash_with_default)]
22459
4.30k
            &&
22460
4.30k
            (_loop0_31_var = _loop0_31_rule(p))  // param_maybe_default*
22461
4.30k
            &&
22462
4.30k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
22463
4.30k
            &&
22464
4.30k
            (_tmp_123_var = _tmp_123_rule(p))  // ',' | param_no_default
22465
4.30k
            &&
22466
4.30k
            (_loop0_31_var_1 = _loop0_31_rule(p))  // param_maybe_default*
22467
4.30k
            &&
22468
4.30k
            (a = _PyPegen_expect_token(p, 17))  // token='/'
22469
4.30k
        )
22470
1
        {
22471
1
            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "[(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'"));
22472
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "/ must be ahead of *" );
22473
1
            if (_res == NULL && PyErr_Occurred()) {
22474
1
                p->error_indicator = 1;
22475
1
                p->level--;
22476
1
                return NULL;
22477
1
            }
22478
0
            goto done;
22479
1
        }
22480
4.30k
        p->mark = _mark;
22481
4.30k
        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22482
4.30k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "[(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'"));
22483
4.30k
    }
22484
0
    { // param_maybe_default+ '/' '*'
22485
4.30k
        if (p->error_indicator) {
22486
4
            p->level--;
22487
4
            return NULL;
22488
4
        }
22489
4.30k
        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default+ '/' '*'"));
22490
4.30k
        Token * _literal;
22491
4.30k
        asdl_seq * _loop1_32_var;
22492
4.30k
        Token * a;
22493
4.30k
        if (
22494
4.30k
            (_loop1_32_var = _loop1_32_rule(p))  // param_maybe_default+
22495
4.30k
            &&
22496
4.30k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
22497
4.30k
            &&
22498
4.30k
            (a = _PyPegen_expect_token(p, 16))  // token='*'
22499
4.30k
        )
22500
2
        {
22501
2
            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_maybe_default+ '/' '*'"));
22502
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expected comma between / and *" );
22503
2
            if (_res == NULL && PyErr_Occurred()) {
22504
2
                p->error_indicator = 1;
22505
2
                p->level--;
22506
2
                return NULL;
22507
2
            }
22508
0
            goto done;
22509
2
        }
22510
4.29k
        p->mark = _mark;
22511
4.29k
        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22512
4.29k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default+ '/' '*'"));
22513
4.29k
    }
22514
0
    _res = NULL;
22515
4.29k
  done:
22516
4.29k
    p->level--;
22517
4.29k
    return _res;
22518
4.29k
}
22519
22520
// invalid_default: '=' &(')' | ',')
22521
static void *
22522
invalid_default_rule(Parser *p)
22523
53.5k
{
22524
53.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22525
0
        _Pypegen_stack_overflow(p);
22526
0
    }
22527
53.5k
    if (p->error_indicator) {
22528
0
        p->level--;
22529
0
        return NULL;
22530
0
    }
22531
53.5k
    void * _res = NULL;
22532
53.5k
    int _mark = p->mark;
22533
53.5k
    { // '=' &(')' | ',')
22534
53.5k
        if (p->error_indicator) {
22535
0
            p->level--;
22536
0
            return NULL;
22537
0
        }
22538
53.5k
        D(fprintf(stderr, "%*c> invalid_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' &(')' | ',')"));
22539
53.5k
        Token * a;
22540
53.5k
        if (
22541
53.5k
            (a = _PyPegen_expect_token(p, 22))  // token='='
22542
53.5k
            &&
22543
53.5k
            _PyPegen_lookahead(1, _tmp_124_rule, p)
22544
53.5k
        )
22545
16
        {
22546
16
            D(fprintf(stderr, "%*c+ invalid_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' &(')' | ',')"));
22547
16
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expected default value expression" );
22548
16
            if (_res == NULL && PyErr_Occurred()) {
22549
16
                p->error_indicator = 1;
22550
16
                p->level--;
22551
16
                return NULL;
22552
16
            }
22553
0
            goto done;
22554
16
        }
22555
53.5k
        p->mark = _mark;
22556
53.5k
        D(fprintf(stderr, "%*c%s invalid_default[%d-%d]: %s failed!\n", p->level, ' ',
22557
53.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' &(')' | ',')"));
22558
53.5k
    }
22559
0
    _res = NULL;
22560
53.5k
  done:
22561
53.5k
    p->level--;
22562
53.5k
    return _res;
22563
53.5k
}
22564
22565
// invalid_star_etc:
22566
//     | '*' (')' | ',' (')' | '**'))
22567
//     | '*' ',' TYPE_COMMENT
22568
//     | '*' param '='
22569
//     | '*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')
22570
static void *
22571
invalid_star_etc_rule(Parser *p)
22572
4.29k
{
22573
4.29k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22574
0
        _Pypegen_stack_overflow(p);
22575
0
    }
22576
4.29k
    if (p->error_indicator) {
22577
0
        p->level--;
22578
0
        return NULL;
22579
0
    }
22580
4.29k
    void * _res = NULL;
22581
4.29k
    int _mark = p->mark;
22582
4.29k
    { // '*' (')' | ',' (')' | '**'))
22583
4.29k
        if (p->error_indicator) {
22584
0
            p->level--;
22585
0
            return NULL;
22586
0
        }
22587
4.29k
        D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
22588
4.29k
        void *_tmp_125_var;
22589
4.29k
        Token * a;
22590
4.29k
        if (
22591
4.29k
            (a = _PyPegen_expect_token(p, 16))  // token='*'
22592
4.29k
            &&
22593
4.29k
            (_tmp_125_var = _tmp_125_rule(p))  // ')' | ',' (')' | '**')
22594
4.29k
        )
22595
3
        {
22596
3
            D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
22597
3
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "named parameters must follow bare *" );
22598
3
            if (_res == NULL && PyErr_Occurred()) {
22599
3
                p->error_indicator = 1;
22600
3
                p->level--;
22601
3
                return NULL;
22602
3
            }
22603
0
            goto done;
22604
3
        }
22605
4.29k
        p->mark = _mark;
22606
4.29k
        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
22607
4.29k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
22608
4.29k
    }
22609
0
    { // '*' ',' TYPE_COMMENT
22610
4.29k
        if (p->error_indicator) {
22611
0
            p->level--;
22612
0
            return NULL;
22613
0
        }
22614
4.29k
        D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' TYPE_COMMENT"));
22615
4.29k
        Token * _literal;
22616
4.29k
        Token * _literal_1;
22617
4.29k
        Token * type_comment_var;
22618
4.29k
        if (
22619
4.29k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
22620
4.29k
            &&
22621
4.29k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
22622
4.29k
            &&
22623
4.29k
            (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
22624
4.29k
        )
22625
0
        {
22626
0
            D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' TYPE_COMMENT"));
22627
0
            _res = RAISE_SYNTAX_ERROR ( "bare * has associated type comment" );
22628
0
            if (_res == NULL && PyErr_Occurred()) {
22629
0
                p->error_indicator = 1;
22630
0
                p->level--;
22631
0
                return NULL;
22632
0
            }
22633
0
            goto done;
22634
0
        }
22635
4.29k
        p->mark = _mark;
22636
4.29k
        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
22637
4.29k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' TYPE_COMMENT"));
22638
4.29k
    }
22639
0
    { // '*' param '='
22640
4.29k
        if (p->error_indicator) {
22641
0
            p->level--;
22642
0
            return NULL;
22643
0
        }
22644
4.29k
        D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param '='"));
22645
4.29k
        Token * _literal;
22646
4.29k
        Token * a;
22647
4.29k
        arg_ty param_var;
22648
4.29k
        if (
22649
4.29k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
22650
4.29k
            &&
22651
4.29k
            (param_var = param_rule(p))  // param
22652
4.29k
            &&
22653
4.29k
            (a = _PyPegen_expect_token(p, 22))  // token='='
22654
4.29k
        )
22655
1
        {
22656
1
            D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param '='"));
22657
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-positional parameter cannot have default value" );
22658
1
            if (_res == NULL && PyErr_Occurred()) {
22659
1
                p->error_indicator = 1;
22660
1
                p->level--;
22661
1
                return NULL;
22662
1
            }
22663
0
            goto done;
22664
1
        }
22665
4.29k
        p->mark = _mark;
22666
4.29k
        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
22667
4.29k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' param '='"));
22668
4.29k
    }
22669
0
    { // '*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')
22670
4.29k
        if (p->error_indicator) {
22671
0
            p->level--;
22672
0
            return NULL;
22673
0
        }
22674
4.29k
        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 | ',')"));
22675
4.29k
        Token * _literal;
22676
4.29k
        asdl_seq * _loop0_31_var;
22677
4.29k
        void *_tmp_126_var;
22678
4.29k
        void *_tmp_126_var_1;
22679
4.29k
        Token * a;
22680
4.29k
        if (
22681
4.29k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
22682
4.29k
            &&
22683
4.29k
            (_tmp_126_var = _tmp_126_rule(p))  // param_no_default | ','
22684
4.29k
            &&
22685
4.29k
            (_loop0_31_var = _loop0_31_rule(p))  // param_maybe_default*
22686
4.29k
            &&
22687
4.29k
            (a = _PyPegen_expect_token(p, 16))  // token='*'
22688
4.29k
            &&
22689
4.29k
            (_tmp_126_var_1 = _tmp_126_rule(p))  // param_no_default | ','
22690
4.29k
        )
22691
2
        {
22692
2
            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 | ',')"));
22693
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "* may appear only once" );
22694
2
            if (_res == NULL && PyErr_Occurred()) {
22695
2
                p->error_indicator = 1;
22696
2
                p->level--;
22697
2
                return NULL;
22698
2
            }
22699
0
            goto done;
22700
2
        }
22701
4.29k
        p->mark = _mark;
22702
4.29k
        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
22703
4.29k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')"));
22704
4.29k
    }
22705
0
    _res = NULL;
22706
4.29k
  done:
22707
4.29k
    p->level--;
22708
4.29k
    return _res;
22709
4.29k
}
22710
22711
// invalid_kwds: '**' param '=' | '**' param ',' param | '**' param ',' ('*' | '**' | '/')
22712
static void *
22713
invalid_kwds_rule(Parser *p)
22714
4.29k
{
22715
4.29k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22716
0
        _Pypegen_stack_overflow(p);
22717
0
    }
22718
4.29k
    if (p->error_indicator) {
22719
0
        p->level--;
22720
0
        return NULL;
22721
0
    }
22722
4.29k
    void * _res = NULL;
22723
4.29k
    int _mark = p->mark;
22724
4.29k
    { // '**' param '='
22725
4.29k
        if (p->error_indicator) {
22726
0
            p->level--;
22727
0
            return NULL;
22728
0
        }
22729
4.29k
        D(fprintf(stderr, "%*c> invalid_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param '='"));
22730
4.29k
        Token * _literal;
22731
4.29k
        Token * a;
22732
4.29k
        arg_ty param_var;
22733
4.29k
        if (
22734
4.29k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
22735
4.29k
            &&
22736
4.29k
            (param_var = param_rule(p))  // param
22737
4.29k
            &&
22738
4.29k
            (a = _PyPegen_expect_token(p, 22))  // token='='
22739
4.29k
        )
22740
2
        {
22741
2
            D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param '='"));
22742
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-keyword parameter cannot have default value" );
22743
2
            if (_res == NULL && PyErr_Occurred()) {
22744
2
                p->error_indicator = 1;
22745
2
                p->level--;
22746
2
                return NULL;
22747
2
            }
22748
0
            goto done;
22749
2
        }
22750
4.28k
        p->mark = _mark;
22751
4.28k
        D(fprintf(stderr, "%*c%s invalid_kwds[%d-%d]: %s failed!\n", p->level, ' ',
22752
4.28k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param '='"));
22753
4.28k
    }
22754
0
    { // '**' param ',' param
22755
4.28k
        if (p->error_indicator) {
22756
1
            p->level--;
22757
1
            return NULL;
22758
1
        }
22759
4.28k
        D(fprintf(stderr, "%*c> invalid_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param ',' param"));
22760
4.28k
        Token * _literal;
22761
4.28k
        Token * _literal_1;
22762
4.28k
        arg_ty a;
22763
4.28k
        arg_ty param_var;
22764
4.28k
        if (
22765
4.28k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
22766
4.28k
            &&
22767
4.28k
            (param_var = param_rule(p))  // param
22768
4.28k
            &&
22769
4.28k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
22770
4.28k
            &&
22771
4.28k
            (a = param_rule(p))  // param
22772
4.28k
        )
22773
2
        {
22774
2
            D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' param"));
22775
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
22776
2
            if (_res == NULL && PyErr_Occurred()) {
22777
2
                p->error_indicator = 1;
22778
2
                p->level--;
22779
2
                return NULL;
22780
2
            }
22781
0
            goto done;
22782
2
        }
22783
4.28k
        p->mark = _mark;
22784
4.28k
        D(fprintf(stderr, "%*c%s invalid_kwds[%d-%d]: %s failed!\n", p->level, ' ',
22785
4.28k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param ',' param"));
22786
4.28k
    }
22787
0
    { // '**' param ',' ('*' | '**' | '/')
22788
4.28k
        if (p->error_indicator) {
22789
1
            p->level--;
22790
1
            return NULL;
22791
1
        }
22792
4.28k
        D(fprintf(stderr, "%*c> invalid_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param ',' ('*' | '**' | '/')"));
22793
4.28k
        Token * _literal;
22794
4.28k
        Token * _literal_1;
22795
4.28k
        Token* a;
22796
4.28k
        arg_ty param_var;
22797
4.28k
        if (
22798
4.28k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
22799
4.28k
            &&
22800
4.28k
            (param_var = param_rule(p))  // param
22801
4.28k
            &&
22802
4.28k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
22803
4.28k
            &&
22804
4.28k
            (a = (Token*)_tmp_127_rule(p))  // '*' | '**' | '/'
22805
4.28k
        )
22806
2
        {
22807
2
            D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' ('*' | '**' | '/')"));
22808
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
22809
2
            if (_res == NULL && PyErr_Occurred()) {
22810
2
                p->error_indicator = 1;
22811
2
                p->level--;
22812
2
                return NULL;
22813
2
            }
22814
0
            goto done;
22815
2
        }
22816
4.28k
        p->mark = _mark;
22817
4.28k
        D(fprintf(stderr, "%*c%s invalid_kwds[%d-%d]: %s failed!\n", p->level, ' ',
22818
4.28k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param ',' ('*' | '**' | '/')"));
22819
4.28k
    }
22820
0
    _res = NULL;
22821
4.28k
  done:
22822
4.28k
    p->level--;
22823
4.28k
    return _res;
22824
4.28k
}
22825
22826
// invalid_parameters_helper: slash_with_default | param_with_default+
22827
static void *
22828
invalid_parameters_helper_rule(Parser *p)
22829
4.31k
{
22830
4.31k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22831
0
        _Pypegen_stack_overflow(p);
22832
0
    }
22833
4.31k
    if (p->error_indicator) {
22834
0
        p->level--;
22835
0
        return NULL;
22836
0
    }
22837
4.31k
    void * _res = NULL;
22838
4.31k
    int _mark = p->mark;
22839
4.31k
    { // slash_with_default
22840
4.31k
        if (p->error_indicator) {
22841
0
            p->level--;
22842
0
            return NULL;
22843
0
        }
22844
4.31k
        D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
22845
4.31k
        SlashWithDefault* a;
22846
4.31k
        if (
22847
4.31k
            (a = slash_with_default_rule(p))  // slash_with_default
22848
4.31k
        )
22849
424
        {
22850
424
            D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
22851
424
            _res = _PyPegen_singleton_seq ( p , a );
22852
424
            if (_res == NULL && PyErr_Occurred()) {
22853
0
                p->error_indicator = 1;
22854
0
                p->level--;
22855
0
                return NULL;
22856
0
            }
22857
424
            goto done;
22858
424
        }
22859
3.89k
        p->mark = _mark;
22860
3.89k
        D(fprintf(stderr, "%*c%s invalid_parameters_helper[%d-%d]: %s failed!\n", p->level, ' ',
22861
3.89k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default"));
22862
3.89k
    }
22863
0
    { // param_with_default+
22864
3.89k
        if (p->error_indicator) {
22865
0
            p->level--;
22866
0
            return NULL;
22867
0
        }
22868
3.89k
        D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+"));
22869
3.89k
        asdl_seq * _loop1_30_var;
22870
3.89k
        if (
22871
3.89k
            (_loop1_30_var = _loop1_30_rule(p))  // param_with_default+
22872
3.89k
        )
22873
511
        {
22874
511
            D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+"));
22875
511
            _res = _loop1_30_var;
22876
511
            goto done;
22877
511
        }
22878
3.38k
        p->mark = _mark;
22879
3.38k
        D(fprintf(stderr, "%*c%s invalid_parameters_helper[%d-%d]: %s failed!\n", p->level, ' ',
22880
3.38k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default+"));
22881
3.38k
    }
22882
0
    _res = NULL;
22883
4.31k
  done:
22884
4.31k
    p->level--;
22885
4.31k
    return _res;
22886
3.38k
}
22887
22888
// invalid_lambda_parameters:
22889
//     | "/" ','
22890
//     | (lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'
22891
//     | lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default
22892
//     | lambda_param_no_default* '(' ','.lambda_param+ ','? ')'
22893
//     | [(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'
22894
//     | lambda_param_maybe_default+ '/' '*'
22895
static void *
22896
invalid_lambda_parameters_rule(Parser *p)
22897
7.76k
{
22898
7.76k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
22899
0
        _Pypegen_stack_overflow(p);
22900
0
    }
22901
7.76k
    if (p->error_indicator) {
22902
0
        p->level--;
22903
0
        return NULL;
22904
0
    }
22905
7.76k
    void * _res = NULL;
22906
7.76k
    int _mark = p->mark;
22907
7.76k
    { // "/" ','
22908
7.76k
        if (p->error_indicator) {
22909
0
            p->level--;
22910
0
            return NULL;
22911
0
        }
22912
7.76k
        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
22913
7.76k
        Token * _literal;
22914
7.76k
        Token * a;
22915
7.76k
        if (
22916
7.76k
            (a = _PyPegen_expect_token(p, 17))  // token='/'
22917
7.76k
            &&
22918
7.76k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
22919
7.76k
        )
22920
2
        {
22921
2
            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
22922
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "at least one parameter must precede /" );
22923
2
            if (_res == NULL && PyErr_Occurred()) {
22924
2
                p->error_indicator = 1;
22925
2
                p->level--;
22926
2
                return NULL;
22927
2
            }
22928
0
            goto done;
22929
2
        }
22930
7.76k
        p->mark = _mark;
22931
7.76k
        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22932
7.76k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"/\" ','"));
22933
7.76k
    }
22934
0
    { // (lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'
22935
7.76k
        if (p->error_indicator) {
22936
1
            p->level--;
22937
1
            return NULL;
22938
1
        }
22939
7.76k
        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* '/'"));
22940
7.76k
        asdl_seq * _loop0_74_var;
22941
7.76k
        void *_tmp_128_var;
22942
7.76k
        Token * a;
22943
7.76k
        if (
22944
7.76k
            (_tmp_128_var = _tmp_128_rule(p))  // lambda_slash_no_default | lambda_slash_with_default
22945
7.76k
            &&
22946
7.76k
            (_loop0_74_var = _loop0_74_rule(p))  // lambda_param_maybe_default*
22947
7.76k
            &&
22948
7.76k
            (a = _PyPegen_expect_token(p, 17))  // token='/'
22949
7.76k
        )
22950
4
        {
22951
4
            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'"));
22952
4
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "/ may appear only once" );
22953
4
            if (_res == NULL && PyErr_Occurred()) {
22954
4
                p->error_indicator = 1;
22955
4
                p->level--;
22956
4
                return NULL;
22957
4
            }
22958
0
            goto done;
22959
4
        }
22960
7.75k
        p->mark = _mark;
22961
7.75k
        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22962
7.75k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'"));
22963
7.75k
    }
22964
0
    { // lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default
22965
7.75k
        if (p->error_indicator) {
22966
439
            p->level--;
22967
439
            return NULL;
22968
439
        }
22969
7.32k
        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"));
22970
7.32k
        asdl_seq * _loop0_70_var;
22971
7.32k
        void *_opt_var;
22972
7.32k
        UNUSED(_opt_var); // Silence compiler warnings
22973
7.32k
        arg_ty a;
22974
7.32k
        void *invalid_lambda_parameters_helper_var;
22975
7.32k
        if (
22976
7.32k
            (_opt_var = lambda_slash_no_default_rule(p), !p->error_indicator)  // lambda_slash_no_default?
22977
7.32k
            &&
22978
7.32k
            (_loop0_70_var = _loop0_70_rule(p))  // lambda_param_no_default*
22979
7.32k
            &&
22980
7.32k
            (invalid_lambda_parameters_helper_var = invalid_lambda_parameters_helper_rule(p))  // invalid_lambda_parameters_helper
22981
7.32k
            &&
22982
7.32k
            (a = lambda_param_no_default_rule(p))  // lambda_param_no_default
22983
7.32k
        )
22984
3
        {
22985
3
            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default"));
22986
3
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameter without a default follows parameter with a default" );
22987
3
            if (_res == NULL && PyErr_Occurred()) {
22988
3
                p->error_indicator = 1;
22989
3
                p->level--;
22990
3
                return NULL;
22991
3
            }
22992
0
            goto done;
22993
3
        }
22994
7.31k
        p->mark = _mark;
22995
7.31k
        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22996
7.31k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default"));
22997
7.31k
    }
22998
0
    { // lambda_param_no_default* '(' ','.lambda_param+ ','? ')'
22999
7.31k
        if (p->error_indicator) {
23000
0
            p->level--;
23001
0
            return NULL;
23002
0
        }
23003
7.31k
        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* '(' ','.lambda_param+ ','? ')'"));
23004
7.31k
        asdl_seq * _gather_130_var;
23005
7.31k
        asdl_seq * _loop0_70_var;
23006
7.31k
        void *_opt_var;
23007
7.31k
        UNUSED(_opt_var); // Silence compiler warnings
23008
7.31k
        Token * a;
23009
7.31k
        Token * b;
23010
7.31k
        if (
23011
7.31k
            (_loop0_70_var = _loop0_70_rule(p))  // lambda_param_no_default*
23012
7.31k
            &&
23013
7.31k
            (a = _PyPegen_expect_token(p, 7))  // token='('
23014
7.31k
            &&
23015
7.31k
            (_gather_130_var = _gather_130_rule(p))  // ','.lambda_param+
23016
7.31k
            &&
23017
7.31k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
23018
7.31k
            &&
23019
7.31k
            (b = _PyPegen_expect_token(p, 8))  // token=')'
23020
7.31k
        )
23021
2
        {
23022
2
            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* '(' ','.lambda_param+ ','? ')'"));
23023
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "Lambda expression parameters cannot be parenthesized" );
23024
2
            if (_res == NULL && PyErr_Occurred()) {
23025
2
                p->error_indicator = 1;
23026
2
                p->level--;
23027
2
                return NULL;
23028
2
            }
23029
0
            goto done;
23030
2
        }
23031
7.31k
        p->mark = _mark;
23032
7.31k
        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
23033
7.31k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* '(' ','.lambda_param+ ','? ')'"));
23034
7.31k
    }
23035
0
    { // [(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'
23036
7.31k
        if (p->error_indicator) {
23037
8
            p->level--;
23038
8
            return NULL;
23039
8
        }
23040
7.30k
        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* '/'"));
23041
7.30k
        Token * _literal;
23042
7.30k
        asdl_seq * _loop0_74_var;
23043
7.30k
        asdl_seq * _loop0_74_var_1;
23044
7.30k
        void *_opt_var;
23045
7.30k
        UNUSED(_opt_var); // Silence compiler warnings
23046
7.30k
        void *_tmp_131_var;
23047
7.30k
        Token * a;
23048
7.30k
        if (
23049
7.30k
            (_opt_var = _tmp_128_rule(p), !p->error_indicator)  // [(lambda_slash_no_default | lambda_slash_with_default)]
23050
7.30k
            &&
23051
7.30k
            (_loop0_74_var = _loop0_74_rule(p))  // lambda_param_maybe_default*
23052
7.30k
            &&
23053
7.30k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
23054
7.30k
            &&
23055
7.30k
            (_tmp_131_var = _tmp_131_rule(p))  // ',' | lambda_param_no_default
23056
7.30k
            &&
23057
7.30k
            (_loop0_74_var_1 = _loop0_74_rule(p))  // lambda_param_maybe_default*
23058
7.30k
            &&
23059
7.30k
            (a = _PyPegen_expect_token(p, 17))  // token='/'
23060
7.30k
        )
23061
3
        {
23062
3
            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\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* '/'"));
23063
3
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "/ must be ahead of *" );
23064
3
            if (_res == NULL && PyErr_Occurred()) {
23065
3
                p->error_indicator = 1;
23066
3
                p->level--;
23067
3
                return NULL;
23068
3
            }
23069
0
            goto done;
23070
3
        }
23071
7.30k
        p->mark = _mark;
23072
7.30k
        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
23073
7.30k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "[(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'"));
23074
7.30k
    }
23075
0
    { // lambda_param_maybe_default+ '/' '*'
23076
7.30k
        if (p->error_indicator) {
23077
225
            p->level--;
23078
225
            return NULL;
23079
225
        }
23080
7.07k
        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default+ '/' '*'"));
23081
7.07k
        Token * _literal;
23082
7.07k
        asdl_seq * _loop1_75_var;
23083
7.07k
        Token * a;
23084
7.07k
        if (
23085
7.07k
            (_loop1_75_var = _loop1_75_rule(p))  // lambda_param_maybe_default+
23086
7.07k
            &&
23087
7.07k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
23088
7.07k
            &&
23089
7.07k
            (a = _PyPegen_expect_token(p, 16))  // token='*'
23090
7.07k
        )
23091
4
        {
23092
4
            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default+ '/' '*'"));
23093
4
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expected comma between / and *" );
23094
4
            if (_res == NULL && PyErr_Occurred()) {
23095
4
                p->error_indicator = 1;
23096
4
                p->level--;
23097
4
                return NULL;
23098
4
            }
23099
0
            goto done;
23100
4
        }
23101
7.07k
        p->mark = _mark;
23102
7.07k
        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
23103
7.07k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default+ '/' '*'"));
23104
7.07k
    }
23105
0
    _res = NULL;
23106
7.07k
  done:
23107
7.07k
    p->level--;
23108
7.07k
    return _res;
23109
7.07k
}
23110
23111
// invalid_lambda_parameters_helper:
23112
//     | lambda_slash_with_default
23113
//     | lambda_param_with_default+
23114
static void *
23115
invalid_lambda_parameters_helper_rule(Parser *p)
23116
7.32k
{
23117
7.32k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23118
0
        _Pypegen_stack_overflow(p);
23119
0
    }
23120
7.32k
    if (p->error_indicator) {
23121
0
        p->level--;
23122
0
        return NULL;
23123
0
    }
23124
7.32k
    void * _res = NULL;
23125
7.32k
    int _mark = p->mark;
23126
7.32k
    { // lambda_slash_with_default
23127
7.32k
        if (p->error_indicator) {
23128
0
            p->level--;
23129
0
            return NULL;
23130
0
        }
23131
7.32k
        D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
23132
7.32k
        SlashWithDefault* a;
23133
7.32k
        if (
23134
7.32k
            (a = lambda_slash_with_default_rule(p))  // lambda_slash_with_default
23135
7.32k
        )
23136
652
        {
23137
652
            D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
23138
652
            _res = _PyPegen_singleton_seq ( p , a );
23139
652
            if (_res == NULL && PyErr_Occurred()) {
23140
0
                p->error_indicator = 1;
23141
0
                p->level--;
23142
0
                return NULL;
23143
0
            }
23144
652
            goto done;
23145
652
        }
23146
6.66k
        p->mark = _mark;
23147
6.66k
        D(fprintf(stderr, "%*c%s invalid_lambda_parameters_helper[%d-%d]: %s failed!\n", p->level, ' ',
23148
6.66k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default"));
23149
6.66k
    }
23150
0
    { // lambda_param_with_default+
23151
6.66k
        if (p->error_indicator) {
23152
0
            p->level--;
23153
0
            return NULL;
23154
0
        }
23155
6.66k
        D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+"));
23156
6.66k
        asdl_seq * _loop1_73_var;
23157
6.66k
        if (
23158
6.66k
            (_loop1_73_var = _loop1_73_rule(p))  // lambda_param_with_default+
23159
6.66k
        )
23160
1.52k
        {
23161
1.52k
            D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+"));
23162
1.52k
            _res = _loop1_73_var;
23163
1.52k
            goto done;
23164
1.52k
        }
23165
5.14k
        p->mark = _mark;
23166
5.14k
        D(fprintf(stderr, "%*c%s invalid_lambda_parameters_helper[%d-%d]: %s failed!\n", p->level, ' ',
23167
5.14k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default+"));
23168
5.14k
    }
23169
0
    _res = NULL;
23170
7.32k
  done:
23171
7.32k
    p->level--;
23172
7.32k
    return _res;
23173
5.14k
}
23174
23175
// invalid_lambda_star_etc:
23176
//     | '*' (':' | ',' (':' | '**'))
23177
//     | '*' lambda_param '='
23178
//     | '*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')
23179
static void *
23180
invalid_lambda_star_etc_rule(Parser *p)
23181
7.07k
{
23182
7.07k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23183
0
        _Pypegen_stack_overflow(p);
23184
0
    }
23185
7.07k
    if (p->error_indicator) {
23186
0
        p->level--;
23187
0
        return NULL;
23188
0
    }
23189
7.07k
    void * _res = NULL;
23190
7.07k
    int _mark = p->mark;
23191
7.07k
    { // '*' (':' | ',' (':' | '**'))
23192
7.07k
        if (p->error_indicator) {
23193
0
            p->level--;
23194
0
            return NULL;
23195
0
        }
23196
7.07k
        D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
23197
7.07k
        Token * _literal;
23198
7.07k
        void *_tmp_132_var;
23199
7.07k
        if (
23200
7.07k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
23201
7.07k
            &&
23202
7.07k
            (_tmp_132_var = _tmp_132_rule(p))  // ':' | ',' (':' | '**')
23203
7.07k
        )
23204
8
        {
23205
8
            D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
23206
8
            _res = RAISE_SYNTAX_ERROR ( "named parameters must follow bare *" );
23207
8
            if (_res == NULL && PyErr_Occurred()) {
23208
8
                p->error_indicator = 1;
23209
8
                p->level--;
23210
8
                return NULL;
23211
8
            }
23212
0
            goto done;
23213
8
        }
23214
7.06k
        p->mark = _mark;
23215
7.06k
        D(fprintf(stderr, "%*c%s invalid_lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
23216
7.06k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
23217
7.06k
    }
23218
0
    { // '*' lambda_param '='
23219
7.06k
        if (p->error_indicator) {
23220
0
            p->level--;
23221
0
            return NULL;
23222
0
        }
23223
7.06k
        D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' lambda_param '='"));
23224
7.06k
        Token * _literal;
23225
7.06k
        Token * a;
23226
7.06k
        arg_ty lambda_param_var;
23227
7.06k
        if (
23228
7.06k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
23229
7.06k
            &&
23230
7.06k
            (lambda_param_var = lambda_param_rule(p))  // lambda_param
23231
7.06k
            &&
23232
7.06k
            (a = _PyPegen_expect_token(p, 22))  // token='='
23233
7.06k
        )
23234
7
        {
23235
7
            D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' lambda_param '='"));
23236
7
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-positional parameter cannot have default value" );
23237
7
            if (_res == NULL && PyErr_Occurred()) {
23238
7
                p->error_indicator = 1;
23239
7
                p->level--;
23240
7
                return NULL;
23241
7
            }
23242
0
            goto done;
23243
7
        }
23244
7.06k
        p->mark = _mark;
23245
7.06k
        D(fprintf(stderr, "%*c%s invalid_lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
23246
7.06k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' lambda_param '='"));
23247
7.06k
    }
23248
0
    { // '*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')
23249
7.06k
        if (p->error_indicator) {
23250
0
            p->level--;
23251
0
            return NULL;
23252
0
        }
23253
7.06k
        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 | ',')"));
23254
7.06k
        Token * _literal;
23255
7.06k
        asdl_seq * _loop0_74_var;
23256
7.06k
        void *_tmp_133_var;
23257
7.06k
        void *_tmp_133_var_1;
23258
7.06k
        Token * a;
23259
7.06k
        if (
23260
7.06k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
23261
7.06k
            &&
23262
7.06k
            (_tmp_133_var = _tmp_133_rule(p))  // lambda_param_no_default | ','
23263
7.06k
            &&
23264
7.06k
            (_loop0_74_var = _loop0_74_rule(p))  // lambda_param_maybe_default*
23265
7.06k
            &&
23266
7.06k
            (a = _PyPegen_expect_token(p, 16))  // token='*'
23267
7.06k
            &&
23268
7.06k
            (_tmp_133_var_1 = _tmp_133_rule(p))  // lambda_param_no_default | ','
23269
7.06k
        )
23270
3
        {
23271
3
            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 | ',')"));
23272
3
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "* may appear only once" );
23273
3
            if (_res == NULL && PyErr_Occurred()) {
23274
3
                p->error_indicator = 1;
23275
3
                p->level--;
23276
3
                return NULL;
23277
3
            }
23278
0
            goto done;
23279
3
        }
23280
7.05k
        p->mark = _mark;
23281
7.05k
        D(fprintf(stderr, "%*c%s invalid_lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
23282
7.05k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')"));
23283
7.05k
    }
23284
0
    _res = NULL;
23285
7.05k
  done:
23286
7.05k
    p->level--;
23287
7.05k
    return _res;
23288
7.05k
}
23289
23290
// invalid_lambda_kwds:
23291
//     | '**' lambda_param '='
23292
//     | '**' lambda_param ',' lambda_param
23293
//     | '**' lambda_param ',' ('*' | '**' | '/')
23294
static void *
23295
invalid_lambda_kwds_rule(Parser *p)
23296
7.05k
{
23297
7.05k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23298
0
        _Pypegen_stack_overflow(p);
23299
0
    }
23300
7.05k
    if (p->error_indicator) {
23301
0
        p->level--;
23302
0
        return NULL;
23303
0
    }
23304
7.05k
    void * _res = NULL;
23305
7.05k
    int _mark = p->mark;
23306
7.05k
    { // '**' lambda_param '='
23307
7.05k
        if (p->error_indicator) {
23308
0
            p->level--;
23309
0
            return NULL;
23310
0
        }
23311
7.05k
        D(fprintf(stderr, "%*c> invalid_lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param '='"));
23312
7.05k
        Token * _literal;
23313
7.05k
        Token * a;
23314
7.05k
        arg_ty lambda_param_var;
23315
7.05k
        if (
23316
7.05k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
23317
7.05k
            &&
23318
7.05k
            (lambda_param_var = lambda_param_rule(p))  // lambda_param
23319
7.05k
            &&
23320
7.05k
            (a = _PyPegen_expect_token(p, 22))  // token='='
23321
7.05k
        )
23322
1
        {
23323
1
            D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param '='"));
23324
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-keyword parameter cannot have default value" );
23325
1
            if (_res == NULL && PyErr_Occurred()) {
23326
1
                p->error_indicator = 1;
23327
1
                p->level--;
23328
1
                return NULL;
23329
1
            }
23330
0
            goto done;
23331
1
        }
23332
7.05k
        p->mark = _mark;
23333
7.05k
        D(fprintf(stderr, "%*c%s invalid_lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
23334
7.05k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param '='"));
23335
7.05k
    }
23336
0
    { // '**' lambda_param ',' lambda_param
23337
7.05k
        if (p->error_indicator) {
23338
1
            p->level--;
23339
1
            return NULL;
23340
1
        }
23341
7.05k
        D(fprintf(stderr, "%*c> invalid_lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' lambda_param"));
23342
7.05k
        Token * _literal;
23343
7.05k
        Token * _literal_1;
23344
7.05k
        arg_ty a;
23345
7.05k
        arg_ty lambda_param_var;
23346
7.05k
        if (
23347
7.05k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
23348
7.05k
            &&
23349
7.05k
            (lambda_param_var = lambda_param_rule(p))  // lambda_param
23350
7.05k
            &&
23351
7.05k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
23352
7.05k
            &&
23353
7.05k
            (a = lambda_param_rule(p))  // lambda_param
23354
7.05k
        )
23355
1
        {
23356
1
            D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' lambda_param"));
23357
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
23358
1
            if (_res == NULL && PyErr_Occurred()) {
23359
1
                p->error_indicator = 1;
23360
1
                p->level--;
23361
1
                return NULL;
23362
1
            }
23363
0
            goto done;
23364
1
        }
23365
7.05k
        p->mark = _mark;
23366
7.05k
        D(fprintf(stderr, "%*c%s invalid_lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
23367
7.05k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param ',' lambda_param"));
23368
7.05k
    }
23369
0
    { // '**' lambda_param ',' ('*' | '**' | '/')
23370
7.05k
        if (p->error_indicator) {
23371
1
            p->level--;
23372
1
            return NULL;
23373
1
        }
23374
7.05k
        D(fprintf(stderr, "%*c> invalid_lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')"));
23375
7.05k
        Token * _literal;
23376
7.05k
        Token * _literal_1;
23377
7.05k
        Token* a;
23378
7.05k
        arg_ty lambda_param_var;
23379
7.05k
        if (
23380
7.05k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
23381
7.05k
            &&
23382
7.05k
            (lambda_param_var = lambda_param_rule(p))  // lambda_param
23383
7.05k
            &&
23384
7.05k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
23385
7.05k
            &&
23386
7.05k
            (a = (Token*)_tmp_127_rule(p))  // '*' | '**' | '/'
23387
7.05k
        )
23388
1
        {
23389
1
            D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')"));
23390
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
23391
1
            if (_res == NULL && PyErr_Occurred()) {
23392
1
                p->error_indicator = 1;
23393
1
                p->level--;
23394
1
                return NULL;
23395
1
            }
23396
0
            goto done;
23397
1
        }
23398
7.05k
        p->mark = _mark;
23399
7.05k
        D(fprintf(stderr, "%*c%s invalid_lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
23400
7.05k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')"));
23401
7.05k
    }
23402
0
    _res = NULL;
23403
7.05k
  done:
23404
7.05k
    p->level--;
23405
7.05k
    return _res;
23406
7.05k
}
23407
23408
// invalid_double_type_comments: TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT
23409
static void *
23410
invalid_double_type_comments_rule(Parser *p)
23411
1.93k
{
23412
1.93k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23413
0
        _Pypegen_stack_overflow(p);
23414
0
    }
23415
1.93k
    if (p->error_indicator) {
23416
0
        p->level--;
23417
0
        return NULL;
23418
0
    }
23419
1.93k
    void * _res = NULL;
23420
1.93k
    int _mark = p->mark;
23421
1.93k
    { // TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT
23422
1.93k
        if (p->error_indicator) {
23423
0
            p->level--;
23424
0
            return NULL;
23425
0
        }
23426
1.93k
        D(fprintf(stderr, "%*c> invalid_double_type_comments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
23427
1.93k
        Token * indent_var;
23428
1.93k
        Token * newline_var;
23429
1.93k
        Token * newline_var_1;
23430
1.93k
        Token * type_comment_var;
23431
1.93k
        Token * type_comment_var_1;
23432
1.93k
        if (
23433
1.93k
            (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
23434
1.93k
            &&
23435
1.93k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
23436
1.93k
            &&
23437
1.93k
            (type_comment_var_1 = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
23438
1.93k
            &&
23439
1.93k
            (newline_var_1 = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
23440
1.93k
            &&
23441
1.93k
            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
23442
1.93k
        )
23443
0
        {
23444
0
            D(fprintf(stderr, "%*c+ invalid_double_type_comments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
23445
0
            _res = RAISE_SYNTAX_ERROR ( "Cannot have two type comments on def" );
23446
0
            if (_res == NULL && PyErr_Occurred()) {
23447
0
                p->error_indicator = 1;
23448
0
                p->level--;
23449
0
                return NULL;
23450
0
            }
23451
0
            goto done;
23452
0
        }
23453
1.93k
        p->mark = _mark;
23454
1.93k
        D(fprintf(stderr, "%*c%s invalid_double_type_comments[%d-%d]: %s failed!\n", p->level, ' ',
23455
1.93k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
23456
1.93k
    }
23457
0
    _res = NULL;
23458
1.93k
  done:
23459
1.93k
    p->level--;
23460
1.93k
    return _res;
23461
1.93k
}
23462
23463
// invalid_with_item: expression 'as' expression &(',' | ')' | ':')
23464
static void *
23465
invalid_with_item_rule(Parser *p)
23466
4.70k
{
23467
4.70k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23468
0
        _Pypegen_stack_overflow(p);
23469
0
    }
23470
4.70k
    if (p->error_indicator) {
23471
0
        p->level--;
23472
0
        return NULL;
23473
0
    }
23474
4.70k
    void * _res = NULL;
23475
4.70k
    int _mark = p->mark;
23476
4.70k
    { // expression 'as' expression &(',' | ')' | ':')
23477
4.70k
        if (p->error_indicator) {
23478
0
            p->level--;
23479
0
            return NULL;
23480
0
        }
23481
4.70k
        D(fprintf(stderr, "%*c> invalid_with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')"));
23482
4.70k
        Token * _keyword;
23483
4.70k
        expr_ty a;
23484
4.70k
        expr_ty expression_var;
23485
4.70k
        if (
23486
4.70k
            (expression_var = expression_rule(p))  // expression
23487
4.70k
            &&
23488
4.70k
            (_keyword = _PyPegen_expect_token(p, 685))  // token='as'
23489
4.70k
            &&
23490
4.70k
            (a = expression_rule(p))  // expression
23491
4.70k
            &&
23492
4.70k
            _PyPegen_lookahead(1, _tmp_35_rule, p)
23493
4.70k
        )
23494
2
        {
23495
2
            D(fprintf(stderr, "%*c+ invalid_with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')"));
23496
2
            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( STAR_TARGETS , a );
23497
2
            if (_res == NULL && PyErr_Occurred()) {
23498
2
                p->error_indicator = 1;
23499
2
                p->level--;
23500
2
                return NULL;
23501
2
            }
23502
0
            goto done;
23503
2
        }
23504
4.70k
        p->mark = _mark;
23505
4.70k
        D(fprintf(stderr, "%*c%s invalid_with_item[%d-%d]: %s failed!\n", p->level, ' ',
23506
4.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')"));
23507
4.70k
    }
23508
0
    _res = NULL;
23509
4.70k
  done:
23510
4.70k
    p->level--;
23511
4.70k
    return _res;
23512
4.70k
}
23513
23514
// invalid_for_if_clause: 'async'? 'for' (bitwise_or ((',' bitwise_or))* ','?) !'in'
23515
static void *
23516
invalid_for_if_clause_rule(Parser *p)
23517
44.0k
{
23518
44.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23519
0
        _Pypegen_stack_overflow(p);
23520
0
    }
23521
44.0k
    if (p->error_indicator) {
23522
0
        p->level--;
23523
0
        return NULL;
23524
0
    }
23525
44.0k
    void * _res = NULL;
23526
44.0k
    int _mark = p->mark;
23527
44.0k
    { // 'async'? 'for' (bitwise_or ((',' bitwise_or))* ','?) !'in'
23528
44.0k
        if (p->error_indicator) {
23529
0
            p->level--;
23530
0
            return NULL;
23531
0
        }
23532
44.0k
        D(fprintf(stderr, "%*c> invalid_for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'for' (bitwise_or ((',' bitwise_or))* ','?) !'in'"));
23533
44.0k
        Token * _keyword;
23534
44.0k
        void *_opt_var;
23535
44.0k
        UNUSED(_opt_var); // Silence compiler warnings
23536
44.0k
        void *_tmp_134_var;
23537
44.0k
        if (
23538
44.0k
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
23539
44.0k
            &&
23540
44.0k
            (_keyword = _PyPegen_expect_token(p, 699))  // token='for'
23541
44.0k
            &&
23542
44.0k
            (_tmp_134_var = _tmp_134_rule(p))  // bitwise_or ((',' bitwise_or))* ','?
23543
44.0k
            &&
23544
44.0k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 700)  // token='in'
23545
44.0k
        )
23546
18
        {
23547
18
            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'"));
23548
18
            _res = RAISE_SYNTAX_ERROR ( "'in' expected after for-loop variables" );
23549
18
            if (_res == NULL && PyErr_Occurred()) {
23550
18
                p->error_indicator = 1;
23551
18
                p->level--;
23552
18
                return NULL;
23553
18
            }
23554
0
            goto done;
23555
18
        }
23556
44.0k
        p->mark = _mark;
23557
44.0k
        D(fprintf(stderr, "%*c%s invalid_for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
23558
44.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'for' (bitwise_or ((',' bitwise_or))* ','?) !'in'"));
23559
44.0k
    }
23560
0
    _res = NULL;
23561
44.0k
  done:
23562
44.0k
    p->level--;
23563
44.0k
    return _res;
23564
44.0k
}
23565
23566
// invalid_for_target: 'async'? 'for' star_expressions
23567
static void *
23568
invalid_for_target_rule(Parser *p)
23569
43.8k
{
23570
43.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23571
0
        _Pypegen_stack_overflow(p);
23572
0
    }
23573
43.8k
    if (p->error_indicator) {
23574
0
        p->level--;
23575
0
        return NULL;
23576
0
    }
23577
43.8k
    void * _res = NULL;
23578
43.8k
    int _mark = p->mark;
23579
43.8k
    { // 'async'? 'for' star_expressions
23580
43.8k
        if (p->error_indicator) {
23581
0
            p->level--;
23582
0
            return NULL;
23583
0
        }
23584
43.8k
        D(fprintf(stderr, "%*c> invalid_for_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_expressions"));
23585
43.8k
        Token * _keyword;
23586
43.8k
        void *_opt_var;
23587
43.8k
        UNUSED(_opt_var); // Silence compiler warnings
23588
43.8k
        expr_ty a;
23589
43.8k
        if (
23590
43.8k
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
23591
43.8k
            &&
23592
43.8k
            (_keyword = _PyPegen_expect_token(p, 699))  // token='for'
23593
43.8k
            &&
23594
43.8k
            (a = star_expressions_rule(p))  // star_expressions
23595
43.8k
        )
23596
1.38k
        {
23597
1.38k
            D(fprintf(stderr, "%*c+ invalid_for_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_expressions"));
23598
1.38k
            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( FOR_TARGETS , a );
23599
1.38k
            if (_res == NULL && PyErr_Occurred()) {
23600
4
                p->error_indicator = 1;
23601
4
                p->level--;
23602
4
                return NULL;
23603
4
            }
23604
1.38k
            goto done;
23605
1.38k
        }
23606
42.5k
        p->mark = _mark;
23607
42.5k
        D(fprintf(stderr, "%*c%s invalid_for_target[%d-%d]: %s failed!\n", p->level, ' ',
23608
42.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'for' star_expressions"));
23609
42.5k
    }
23610
0
    _res = NULL;
23611
43.8k
  done:
23612
43.8k
    p->level--;
23613
43.8k
    return _res;
23614
42.5k
}
23615
23616
// invalid_group: '(' starred_expression ')' | '(' '**' expression ')'
23617
static void *
23618
invalid_group_rule(Parser *p)
23619
7.96k
{
23620
7.96k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23621
0
        _Pypegen_stack_overflow(p);
23622
0
    }
23623
7.96k
    if (p->error_indicator) {
23624
0
        p->level--;
23625
0
        return NULL;
23626
0
    }
23627
7.96k
    void * _res = NULL;
23628
7.96k
    int _mark = p->mark;
23629
7.96k
    { // '(' starred_expression ')'
23630
7.96k
        if (p->error_indicator) {
23631
0
            p->level--;
23632
0
            return NULL;
23633
0
        }
23634
7.96k
        D(fprintf(stderr, "%*c> invalid_group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' starred_expression ')'"));
23635
7.96k
        Token * _literal;
23636
7.96k
        Token * _literal_1;
23637
7.96k
        expr_ty a;
23638
7.96k
        if (
23639
7.96k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
23640
7.96k
            &&
23641
7.96k
            (a = starred_expression_rule(p))  // starred_expression
23642
7.96k
            &&
23643
7.96k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
23644
7.96k
        )
23645
2
        {
23646
2
            D(fprintf(stderr, "%*c+ invalid_group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' starred_expression ')'"));
23647
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use starred expression here" );
23648
2
            if (_res == NULL && PyErr_Occurred()) {
23649
2
                p->error_indicator = 1;
23650
2
                p->level--;
23651
2
                return NULL;
23652
2
            }
23653
0
            goto done;
23654
2
        }
23655
7.96k
        p->mark = _mark;
23656
7.96k
        D(fprintf(stderr, "%*c%s invalid_group[%d-%d]: %s failed!\n", p->level, ' ',
23657
7.96k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' starred_expression ')'"));
23658
7.96k
    }
23659
0
    { // '(' '**' expression ')'
23660
7.96k
        if (p->error_indicator) {
23661
288
            p->level--;
23662
288
            return NULL;
23663
288
        }
23664
7.67k
        D(fprintf(stderr, "%*c> invalid_group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' '**' expression ')'"));
23665
7.67k
        Token * _literal;
23666
7.67k
        Token * _literal_1;
23667
7.67k
        Token * a;
23668
7.67k
        expr_ty expression_var;
23669
7.67k
        if (
23670
7.67k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
23671
7.67k
            &&
23672
7.67k
            (a = _PyPegen_expect_token(p, 35))  // token='**'
23673
7.67k
            &&
23674
7.67k
            (expression_var = expression_rule(p))  // expression
23675
7.67k
            &&
23676
7.67k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
23677
7.67k
        )
23678
1
        {
23679
1
            D(fprintf(stderr, "%*c+ invalid_group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' '**' expression ')'"));
23680
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use double starred expression here" );
23681
1
            if (_res == NULL && PyErr_Occurred()) {
23682
1
                p->error_indicator = 1;
23683
1
                p->level--;
23684
1
                return NULL;
23685
1
            }
23686
0
            goto done;
23687
1
        }
23688
7.67k
        p->mark = _mark;
23689
7.67k
        D(fprintf(stderr, "%*c%s invalid_group[%d-%d]: %s failed!\n", p->level, ' ',
23690
7.67k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' '**' expression ')'"));
23691
7.67k
    }
23692
0
    _res = NULL;
23693
7.67k
  done:
23694
7.67k
    p->level--;
23695
7.67k
    return _res;
23696
7.67k
}
23697
23698
// invalid_import: 'import' ','.dotted_name+ 'from' dotted_name | 'import' NEWLINE
23699
static void *
23700
invalid_import_rule(Parser *p)
23701
1.39k
{
23702
1.39k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23703
0
        _Pypegen_stack_overflow(p);
23704
0
    }
23705
1.39k
    if (p->error_indicator) {
23706
0
        p->level--;
23707
0
        return NULL;
23708
0
    }
23709
1.39k
    void * _res = NULL;
23710
1.39k
    int _mark = p->mark;
23711
1.39k
    { // 'import' ','.dotted_name+ 'from' dotted_name
23712
1.39k
        if (p->error_indicator) {
23713
0
            p->level--;
23714
0
            return NULL;
23715
0
        }
23716
1.39k
        D(fprintf(stderr, "%*c> invalid_import[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' ','.dotted_name+ 'from' dotted_name"));
23717
1.39k
        asdl_seq * _gather_136_var;
23718
1.39k
        Token * _keyword;
23719
1.39k
        Token * a;
23720
1.39k
        expr_ty dotted_name_var;
23721
1.39k
        if (
23722
1.39k
            (a = _PyPegen_expect_token(p, 639))  // token='import'
23723
1.39k
            &&
23724
1.39k
            (_gather_136_var = _gather_136_rule(p))  // ','.dotted_name+
23725
1.39k
            &&
23726
1.39k
            (_keyword = _PyPegen_expect_token(p, 638))  // token='from'
23727
1.39k
            &&
23728
1.39k
            (dotted_name_var = dotted_name_rule(p))  // dotted_name
23729
1.39k
        )
23730
1
        {
23731
1
            D(fprintf(stderr, "%*c+ invalid_import[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import' ','.dotted_name+ 'from' dotted_name"));
23732
1
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "Did you mean to use 'from ... import ...' instead?" );
23733
1
            if (_res == NULL && PyErr_Occurred()) {
23734
1
                p->error_indicator = 1;
23735
1
                p->level--;
23736
1
                return NULL;
23737
1
            }
23738
0
            goto done;
23739
1
        }
23740
1.39k
        p->mark = _mark;
23741
1.39k
        D(fprintf(stderr, "%*c%s invalid_import[%d-%d]: %s failed!\n", p->level, ' ',
23742
1.39k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import' ','.dotted_name+ 'from' dotted_name"));
23743
1.39k
    }
23744
0
    { // 'import' NEWLINE
23745
1.39k
        if (p->error_indicator) {
23746
2
            p->level--;
23747
2
            return NULL;
23748
2
        }
23749
1.39k
        D(fprintf(stderr, "%*c> invalid_import[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' NEWLINE"));
23750
1.39k
        Token * _keyword;
23751
1.39k
        Token * token;
23752
1.39k
        if (
23753
1.39k
            (_keyword = _PyPegen_expect_token(p, 639))  // token='import'
23754
1.39k
            &&
23755
1.39k
            (token = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
23756
1.39k
        )
23757
2
        {
23758
2
            D(fprintf(stderr, "%*c+ invalid_import[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import' NEWLINE"));
23759
2
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( token , "Expected one or more names after 'import'" );
23760
2
            if (_res == NULL && PyErr_Occurred()) {
23761
2
                p->error_indicator = 1;
23762
2
                p->level--;
23763
2
                return NULL;
23764
2
            }
23765
0
            goto done;
23766
2
        }
23767
1.39k
        p->mark = _mark;
23768
1.39k
        D(fprintf(stderr, "%*c%s invalid_import[%d-%d]: %s failed!\n", p->level, ' ',
23769
1.39k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import' NEWLINE"));
23770
1.39k
    }
23771
0
    _res = NULL;
23772
1.39k
  done:
23773
1.39k
    p->level--;
23774
1.39k
    return _res;
23775
1.39k
}
23776
23777
// invalid_dotted_as_name: dotted_name 'as' !(NAME (',' | ')' | NEWLINE)) expression
23778
static void *
23779
invalid_dotted_as_name_rule(Parser *p)
23780
2.45k
{
23781
2.45k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23782
0
        _Pypegen_stack_overflow(p);
23783
0
    }
23784
2.45k
    if (p->error_indicator) {
23785
0
        p->level--;
23786
0
        return NULL;
23787
0
    }
23788
2.45k
    void * _res = NULL;
23789
2.45k
    int _mark = p->mark;
23790
2.45k
    { // dotted_name 'as' !(NAME (',' | ')' | NEWLINE)) expression
23791
2.45k
        if (p->error_indicator) {
23792
0
            p->level--;
23793
0
            return NULL;
23794
0
        }
23795
2.45k
        D(fprintf(stderr, "%*c> invalid_dotted_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name 'as' !(NAME (',' | ')' | NEWLINE)) expression"));
23796
2.45k
        Token * _keyword;
23797
2.45k
        expr_ty a;
23798
2.45k
        expr_ty dotted_name_var;
23799
2.45k
        if (
23800
2.45k
            (dotted_name_var = dotted_name_rule(p))  // dotted_name
23801
2.45k
            &&
23802
2.45k
            (_keyword = _PyPegen_expect_token(p, 685))  // token='as'
23803
2.45k
            &&
23804
2.45k
            _PyPegen_lookahead(0, _tmp_137_rule, p)
23805
2.45k
            &&
23806
2.45k
            (a = expression_rule(p))  // expression
23807
2.45k
        )
23808
5
        {
23809
5
            D(fprintf(stderr, "%*c+ invalid_dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name 'as' !(NAME (',' | ')' | NEWLINE)) expression"));
23810
5
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use %s as import target" , _PyPegen_get_expr_name ( a ) );
23811
5
            if (_res == NULL && PyErr_Occurred()) {
23812
5
                p->error_indicator = 1;
23813
5
                p->level--;
23814
5
                return NULL;
23815
5
            }
23816
0
            goto done;
23817
5
        }
23818
2.44k
        p->mark = _mark;
23819
2.44k
        D(fprintf(stderr, "%*c%s invalid_dotted_as_name[%d-%d]: %s failed!\n", p->level, ' ',
23820
2.44k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name 'as' !(NAME (',' | ')' | NEWLINE)) expression"));
23821
2.44k
    }
23822
0
    _res = NULL;
23823
2.44k
  done:
23824
2.44k
    p->level--;
23825
2.44k
    return _res;
23826
2.44k
}
23827
23828
// invalid_import_from_as_name: NAME 'as' !(NAME (',' | ')' | NEWLINE)) expression
23829
static void *
23830
invalid_import_from_as_name_rule(Parser *p)
23831
1.81k
{
23832
1.81k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23833
0
        _Pypegen_stack_overflow(p);
23834
0
    }
23835
1.81k
    if (p->error_indicator) {
23836
0
        p->level--;
23837
0
        return NULL;
23838
0
    }
23839
1.81k
    void * _res = NULL;
23840
1.81k
    int _mark = p->mark;
23841
1.81k
    { // NAME 'as' !(NAME (',' | ')' | NEWLINE)) expression
23842
1.81k
        if (p->error_indicator) {
23843
0
            p->level--;
23844
0
            return NULL;
23845
0
        }
23846
1.81k
        D(fprintf(stderr, "%*c> invalid_import_from_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME 'as' !(NAME (',' | ')' | NEWLINE)) expression"));
23847
1.81k
        Token * _keyword;
23848
1.81k
        expr_ty a;
23849
1.81k
        expr_ty name_var;
23850
1.81k
        if (
23851
1.81k
            (name_var = _PyPegen_name_token(p))  // NAME
23852
1.81k
            &&
23853
1.81k
            (_keyword = _PyPegen_expect_token(p, 685))  // token='as'
23854
1.81k
            &&
23855
1.81k
            _PyPegen_lookahead(0, _tmp_137_rule, p)
23856
1.81k
            &&
23857
1.81k
            (a = expression_rule(p))  // expression
23858
1.81k
        )
23859
1
        {
23860
1
            D(fprintf(stderr, "%*c+ invalid_import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME 'as' !(NAME (',' | ')' | NEWLINE)) expression"));
23861
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use %s as import target" , _PyPegen_get_expr_name ( a ) );
23862
1
            if (_res == NULL && PyErr_Occurred()) {
23863
1
                p->error_indicator = 1;
23864
1
                p->level--;
23865
1
                return NULL;
23866
1
            }
23867
0
            goto done;
23868
1
        }
23869
1.81k
        p->mark = _mark;
23870
1.81k
        D(fprintf(stderr, "%*c%s invalid_import_from_as_name[%d-%d]: %s failed!\n", p->level, ' ',
23871
1.81k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME 'as' !(NAME (',' | ')' | NEWLINE)) expression"));
23872
1.81k
    }
23873
0
    _res = NULL;
23874
1.81k
  done:
23875
1.81k
    p->level--;
23876
1.81k
    return _res;
23877
1.81k
}
23878
23879
// invalid_import_from_targets: import_from_as_names ',' NEWLINE | NEWLINE
23880
static void *
23881
invalid_import_from_targets_rule(Parser *p)
23882
28
{
23883
28
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23884
0
        _Pypegen_stack_overflow(p);
23885
0
    }
23886
28
    if (p->error_indicator) {
23887
0
        p->level--;
23888
0
        return NULL;
23889
0
    }
23890
28
    void * _res = NULL;
23891
28
    int _mark = p->mark;
23892
28
    { // import_from_as_names ',' NEWLINE
23893
28
        if (p->error_indicator) {
23894
0
            p->level--;
23895
0
            return NULL;
23896
0
        }
23897
28
        D(fprintf(stderr, "%*c> invalid_import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_names ',' NEWLINE"));
23898
28
        Token * _literal;
23899
28
        asdl_alias_seq* import_from_as_names_var;
23900
28
        Token * newline_var;
23901
28
        if (
23902
28
            (import_from_as_names_var = import_from_as_names_rule(p))  // import_from_as_names
23903
28
            &&
23904
28
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
23905
28
            &&
23906
28
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
23907
28
        )
23908
11
        {
23909
11
            D(fprintf(stderr, "%*c+ invalid_import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_names ',' NEWLINE"));
23910
11
            _res = RAISE_SYNTAX_ERROR ( "trailing comma not allowed without surrounding parentheses" );
23911
11
            if (_res == NULL && PyErr_Occurred()) {
23912
11
                p->error_indicator = 1;
23913
11
                p->level--;
23914
11
                return NULL;
23915
11
            }
23916
0
            goto done;
23917
11
        }
23918
17
        p->mark = _mark;
23919
17
        D(fprintf(stderr, "%*c%s invalid_import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
23920
17
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_names ',' NEWLINE"));
23921
17
    }
23922
0
    { // NEWLINE
23923
17
        if (p->error_indicator) {
23924
0
            p->level--;
23925
0
            return NULL;
23926
0
        }
23927
17
        D(fprintf(stderr, "%*c> invalid_import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
23928
17
        Token * token;
23929
17
        if (
23930
17
            (token = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
23931
17
        )
23932
5
        {
23933
5
            D(fprintf(stderr, "%*c+ invalid_import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
23934
5
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( token , "Expected one or more names after 'import'" );
23935
5
            if (_res == NULL && PyErr_Occurred()) {
23936
5
                p->error_indicator = 1;
23937
5
                p->level--;
23938
5
                return NULL;
23939
5
            }
23940
0
            goto done;
23941
5
        }
23942
12
        p->mark = _mark;
23943
12
        D(fprintf(stderr, "%*c%s invalid_import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
23944
12
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
23945
12
    }
23946
0
    _res = NULL;
23947
12
  done:
23948
12
    p->level--;
23949
12
    return _res;
23950
12
}
23951
23952
// invalid_with_stmt:
23953
//     | 'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE
23954
//     | 'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE
23955
static void *
23956
invalid_with_stmt_rule(Parser *p)
23957
271
{
23958
271
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
23959
0
        _Pypegen_stack_overflow(p);
23960
0
    }
23961
271
    if (p->error_indicator) {
23962
0
        p->level--;
23963
0
        return NULL;
23964
0
    }
23965
271
    void * _res = NULL;
23966
271
    int _mark = p->mark;
23967
271
    { // 'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE
23968
271
        if (p->error_indicator) {
23969
0
            p->level--;
23970
0
            return NULL;
23971
0
        }
23972
271
        D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE"));
23973
271
        asdl_seq * _gather_139_var;
23974
271
        Token * _keyword;
23975
271
        void *_opt_var;
23976
271
        UNUSED(_opt_var); // Silence compiler warnings
23977
271
        Token * newline_var;
23978
271
        if (
23979
271
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
23980
271
            &&
23981
271
            (_keyword = _PyPegen_expect_token(p, 652))  // token='with'
23982
271
            &&
23983
271
            (_gather_139_var = _gather_139_rule(p))  // ','.(expression ['as' star_target])+
23984
271
            &&
23985
271
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
23986
271
        )
23987
35
        {
23988
35
            D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE"));
23989
35
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
23990
35
            if (_res == NULL && PyErr_Occurred()) {
23991
35
                p->error_indicator = 1;
23992
35
                p->level--;
23993
35
                return NULL;
23994
35
            }
23995
0
            goto done;
23996
35
        }
23997
236
        p->mark = _mark;
23998
236
        D(fprintf(stderr, "%*c%s invalid_with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23999
236
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE"));
24000
236
    }
24001
0
    { // 'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE
24002
236
        if (p->error_indicator) {
24003
0
            p->level--;
24004
0
            return NULL;
24005
0
        }
24006
236
        D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE"));
24007
236
        asdl_seq * _gather_141_var;
24008
236
        Token * _keyword;
24009
236
        Token * _literal;
24010
236
        Token * _literal_1;
24011
236
        void *_opt_var;
24012
236
        UNUSED(_opt_var); // Silence compiler warnings
24013
236
        void *_opt_var_1;
24014
236
        UNUSED(_opt_var_1); // Silence compiler warnings
24015
236
        Token * newline_var;
24016
236
        if (
24017
236
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
24018
236
            &&
24019
236
            (_keyword = _PyPegen_expect_token(p, 652))  // token='with'
24020
236
            &&
24021
236
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
24022
236
            &&
24023
236
            (_gather_141_var = _gather_141_rule(p))  // ','.(expressions ['as' star_target])+
24024
236
            &&
24025
236
            (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
24026
236
            &&
24027
236
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
24028
236
            &&
24029
236
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24030
236
        )
24031
5
        {
24032
5
            D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE"));
24033
5
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
24034
5
            if (_res == NULL && PyErr_Occurred()) {
24035
5
                p->error_indicator = 1;
24036
5
                p->level--;
24037
5
                return NULL;
24038
5
            }
24039
0
            goto done;
24040
5
        }
24041
231
        p->mark = _mark;
24042
231
        D(fprintf(stderr, "%*c%s invalid_with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24043
231
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE"));
24044
231
    }
24045
0
    _res = NULL;
24046
231
  done:
24047
231
    p->level--;
24048
231
    return _res;
24049
231
}
24050
24051
// invalid_with_stmt_indent:
24052
//     | 'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT
24053
//     | 'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT
24054
static void *
24055
invalid_with_stmt_indent_rule(Parser *p)
24056
2.03k
{
24057
2.03k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
24058
0
        _Pypegen_stack_overflow(p);
24059
0
    }
24060
2.03k
    if (p->error_indicator) {
24061
0
        p->level--;
24062
0
        return NULL;
24063
0
    }
24064
2.03k
    void * _res = NULL;
24065
2.03k
    int _mark = p->mark;
24066
2.03k
    { // 'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT
24067
2.03k
        if (p->error_indicator) {
24068
0
            p->level--;
24069
0
            return NULL;
24070
0
        }
24071
2.03k
        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"));
24072
2.03k
        asdl_seq * _gather_139_var;
24073
2.03k
        Token * _literal;
24074
2.03k
        void *_opt_var;
24075
2.03k
        UNUSED(_opt_var); // Silence compiler warnings
24076
2.03k
        Token * a;
24077
2.03k
        Token * newline_var;
24078
2.03k
        if (
24079
2.03k
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
24080
2.03k
            &&
24081
2.03k
            (a = _PyPegen_expect_token(p, 652))  // token='with'
24082
2.03k
            &&
24083
2.03k
            (_gather_139_var = _gather_139_rule(p))  // ','.(expression ['as' star_target])+
24084
2.03k
            &&
24085
2.03k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24086
2.03k
            &&
24087
2.03k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24088
2.03k
            &&
24089
2.03k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
24090
2.03k
        )
24091
14
        {
24092
14
            D(fprintf(stderr, "%*c+ invalid_with_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT"));
24093
14
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'with' statement on line %d" , a -> lineno );
24094
14
            if (_res == NULL && PyErr_Occurred()) {
24095
14
                p->error_indicator = 1;
24096
14
                p->level--;
24097
14
                return NULL;
24098
14
            }
24099
0
            goto done;
24100
14
        }
24101
2.01k
        p->mark = _mark;
24102
2.01k
        D(fprintf(stderr, "%*c%s invalid_with_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
24103
2.01k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT"));
24104
2.01k
    }
24105
0
    { // 'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT
24106
2.01k
        if (p->error_indicator) {
24107
12
            p->level--;
24108
12
            return NULL;
24109
12
        }
24110
2.00k
        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"));
24111
2.00k
        asdl_seq * _gather_141_var;
24112
2.00k
        Token * _literal;
24113
2.00k
        Token * _literal_1;
24114
2.00k
        Token * _literal_2;
24115
2.00k
        void *_opt_var;
24116
2.00k
        UNUSED(_opt_var); // Silence compiler warnings
24117
2.00k
        void *_opt_var_1;
24118
2.00k
        UNUSED(_opt_var_1); // Silence compiler warnings
24119
2.00k
        Token * a;
24120
2.00k
        Token * newline_var;
24121
2.00k
        if (
24122
2.00k
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
24123
2.00k
            &&
24124
2.00k
            (a = _PyPegen_expect_token(p, 652))  // token='with'
24125
2.00k
            &&
24126
2.00k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
24127
2.00k
            &&
24128
2.00k
            (_gather_141_var = _gather_141_rule(p))  // ','.(expressions ['as' star_target])+
24129
2.00k
            &&
24130
2.00k
            (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
24131
2.00k
            &&
24132
2.00k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
24133
2.00k
            &&
24134
2.00k
            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
24135
2.00k
            &&
24136
2.00k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24137
2.00k
            &&
24138
2.00k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
24139
2.00k
        )
24140
2
        {
24141
2
            D(fprintf(stderr, "%*c+ invalid_with_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT"));
24142
2
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'with' statement on line %d" , a -> lineno );
24143
2
            if (_res == NULL && PyErr_Occurred()) {
24144
2
                p->error_indicator = 1;
24145
2
                p->level--;
24146
2
                return NULL;
24147
2
            }
24148
0
            goto done;
24149
2
        }
24150
2.00k
        p->mark = _mark;
24151
2.00k
        D(fprintf(stderr, "%*c%s invalid_with_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
24152
2.00k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT"));
24153
2.00k
    }
24154
0
    _res = NULL;
24155
2.00k
  done:
24156
2.00k
    p->level--;
24157
2.00k
    return _res;
24158
2.00k
}
24159
24160
// invalid_try_stmt:
24161
//     | 'try' ':' NEWLINE !INDENT
24162
//     | 'try' ':' block !('except' | 'finally')
24163
//     | 'try' ':' block* except_block+ 'except' '*' expression ['as' NAME] ':'
24164
//     | 'try' ':' block* except_star_block+ 'except' [expression ['as' NAME]] ':'
24165
static void *
24166
invalid_try_stmt_rule(Parser *p)
24167
1.80k
{
24168
1.80k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
24169
0
        _Pypegen_stack_overflow(p);
24170
0
    }
24171
1.80k
    if (p->error_indicator) {
24172
0
        p->level--;
24173
0
        return NULL;
24174
0
    }
24175
1.80k
    void * _res = NULL;
24176
1.80k
    int _mark = p->mark;
24177
1.80k
    { // 'try' ':' NEWLINE !INDENT
24178
1.80k
        if (p->error_indicator) {
24179
0
            p->level--;
24180
0
            return NULL;
24181
0
        }
24182
1.80k
        D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' NEWLINE !INDENT"));
24183
1.80k
        Token * _literal;
24184
1.80k
        Token * a;
24185
1.80k
        Token * newline_var;
24186
1.80k
        if (
24187
1.80k
            (a = _PyPegen_expect_token(p, 661))  // token='try'
24188
1.80k
            &&
24189
1.80k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24190
1.80k
            &&
24191
1.80k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24192
1.80k
            &&
24193
1.80k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
24194
1.80k
        )
24195
6
        {
24196
6
            D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' NEWLINE !INDENT"));
24197
6
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'try' statement on line %d" , a -> lineno );
24198
6
            if (_res == NULL && PyErr_Occurred()) {
24199
6
                p->error_indicator = 1;
24200
6
                p->level--;
24201
6
                return NULL;
24202
6
            }
24203
0
            goto done;
24204
6
        }
24205
1.79k
        p->mark = _mark;
24206
1.79k
        D(fprintf(stderr, "%*c%s invalid_try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24207
1.79k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' NEWLINE !INDENT"));
24208
1.79k
    }
24209
0
    { // 'try' ':' block !('except' | 'finally')
24210
1.79k
        if (p->error_indicator) {
24211
1
            p->level--;
24212
1
            return NULL;
24213
1
        }
24214
1.79k
        D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' block !('except' | 'finally')"));
24215
1.79k
        Token * _keyword;
24216
1.79k
        Token * _literal;
24217
1.79k
        asdl_stmt_seq* block_var;
24218
1.79k
        if (
24219
1.79k
            (_keyword = _PyPegen_expect_token(p, 661))  // token='try'
24220
1.79k
            &&
24221
1.79k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24222
1.79k
            &&
24223
1.79k
            (block_var = block_rule(p))  // block
24224
1.79k
            &&
24225
1.79k
            _PyPegen_lookahead(0, _tmp_142_rule, p)
24226
1.79k
        )
24227
33
        {
24228
33
            D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block !('except' | 'finally')"));
24229
33
            _res = RAISE_SYNTAX_ERROR ( "expected 'except' or 'finally' block" );
24230
33
            if (_res == NULL && PyErr_Occurred()) {
24231
33
                p->error_indicator = 1;
24232
33
                p->level--;
24233
33
                return NULL;
24234
33
            }
24235
0
            goto done;
24236
33
        }
24237
1.76k
        p->mark = _mark;
24238
1.76k
        D(fprintf(stderr, "%*c%s invalid_try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24239
1.76k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' block !('except' | 'finally')"));
24240
1.76k
    }
24241
0
    { // 'try' ':' block* except_block+ 'except' '*' expression ['as' NAME] ':'
24242
1.76k
        if (p->error_indicator) {
24243
15
            p->level--;
24244
15
            return NULL;
24245
15
        }
24246
1.74k
        D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' block* except_block+ 'except' '*' expression ['as' NAME] ':'"));
24247
1.74k
        Token * _keyword;
24248
1.74k
        Token * _literal;
24249
1.74k
        Token * _literal_1;
24250
1.74k
        asdl_seq * _loop0_143_var;
24251
1.74k
        asdl_seq * _loop1_36_var;
24252
1.74k
        void *_opt_var;
24253
1.74k
        UNUSED(_opt_var); // Silence compiler warnings
24254
1.74k
        Token * a;
24255
1.74k
        Token * b;
24256
1.74k
        expr_ty expression_var;
24257
1.74k
        if (
24258
1.74k
            (_keyword = _PyPegen_expect_token(p, 661))  // token='try'
24259
1.74k
            &&
24260
1.74k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24261
1.74k
            &&
24262
1.74k
            (_loop0_143_var = _loop0_143_rule(p))  // block*
24263
1.74k
            &&
24264
1.74k
            (_loop1_36_var = _loop1_36_rule(p))  // except_block+
24265
1.74k
            &&
24266
1.74k
            (a = _PyPegen_expect_token(p, 682))  // token='except'
24267
1.74k
            &&
24268
1.74k
            (b = _PyPegen_expect_token(p, 16))  // token='*'
24269
1.74k
            &&
24270
1.74k
            (expression_var = expression_rule(p))  // expression
24271
1.74k
            &&
24272
1.74k
            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
24273
1.74k
            &&
24274
1.74k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
24275
1.74k
        )
24276
1
        {
24277
1
            D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block* except_block+ 'except' '*' expression ['as' NAME] ':'"));
24278
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot have both 'except' and 'except*' on the same 'try'" );
24279
1
            if (_res == NULL && PyErr_Occurred()) {
24280
1
                p->error_indicator = 1;
24281
1
                p->level--;
24282
1
                return NULL;
24283
1
            }
24284
0
            goto done;
24285
1
        }
24286
1.74k
        p->mark = _mark;
24287
1.74k
        D(fprintf(stderr, "%*c%s invalid_try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24288
1.74k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' block* except_block+ 'except' '*' expression ['as' NAME] ':'"));
24289
1.74k
    }
24290
0
    { // 'try' ':' block* except_star_block+ 'except' [expression ['as' NAME]] ':'
24291
1.74k
        if (p->error_indicator) {
24292
42
            p->level--;
24293
42
            return NULL;
24294
42
        }
24295
1.70k
        D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' block* except_star_block+ 'except' [expression ['as' NAME]] ':'"));
24296
1.70k
        Token * _keyword;
24297
1.70k
        Token * _literal;
24298
1.70k
        Token * _literal_1;
24299
1.70k
        asdl_seq * _loop0_143_var;
24300
1.70k
        asdl_seq * _loop1_37_var;
24301
1.70k
        void *_opt_var;
24302
1.70k
        UNUSED(_opt_var); // Silence compiler warnings
24303
1.70k
        Token * a;
24304
1.70k
        if (
24305
1.70k
            (_keyword = _PyPegen_expect_token(p, 661))  // token='try'
24306
1.70k
            &&
24307
1.70k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24308
1.70k
            &&
24309
1.70k
            (_loop0_143_var = _loop0_143_rule(p))  // block*
24310
1.70k
            &&
24311
1.70k
            (_loop1_37_var = _loop1_37_rule(p))  // except_star_block+
24312
1.70k
            &&
24313
1.70k
            (a = _PyPegen_expect_token(p, 682))  // token='except'
24314
1.70k
            &&
24315
1.70k
            (_opt_var = _tmp_144_rule(p), !p->error_indicator)  // [expression ['as' NAME]]
24316
1.70k
            &&
24317
1.70k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
24318
1.70k
        )
24319
2
        {
24320
2
            D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block* except_star_block+ 'except' [expression ['as' NAME]] ':'"));
24321
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot have both 'except' and 'except*' on the same 'try'" );
24322
2
            if (_res == NULL && PyErr_Occurred()) {
24323
2
                p->error_indicator = 1;
24324
2
                p->level--;
24325
2
                return NULL;
24326
2
            }
24327
0
            goto done;
24328
2
        }
24329
1.70k
        p->mark = _mark;
24330
1.70k
        D(fprintf(stderr, "%*c%s invalid_try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24331
1.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' block* except_star_block+ 'except' [expression ['as' NAME]] ':'"));
24332
1.70k
    }
24333
0
    _res = NULL;
24334
1.70k
  done:
24335
1.70k
    p->level--;
24336
1.70k
    return _res;
24337
1.70k
}
24338
24339
// invalid_except_stmt:
24340
//     | 'except' expression ',' expressions 'as' NAME ':'
24341
//     | 'except' expression ['as' NAME] NEWLINE
24342
//     | 'except' NEWLINE
24343
//     | 'except' expression 'as' expression ':' block
24344
static void *
24345
invalid_except_stmt_rule(Parser *p)
24346
3.05k
{
24347
3.05k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
24348
0
        _Pypegen_stack_overflow(p);
24349
0
    }
24350
3.05k
    if (p->error_indicator) {
24351
0
        p->level--;
24352
0
        return NULL;
24353
0
    }
24354
3.05k
    void * _res = NULL;
24355
3.05k
    int _mark = p->mark;
24356
3.05k
    { // 'except' expression ',' expressions 'as' NAME ':'
24357
3.05k
        if (p->error_indicator) {
24358
0
            p->level--;
24359
0
            return NULL;
24360
0
        }
24361
3.05k
        D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions 'as' NAME ':'"));
24362
3.05k
        Token * _keyword;
24363
3.05k
        Token * _keyword_1;
24364
3.05k
        Token * _literal;
24365
3.05k
        Token * _literal_1;
24366
3.05k
        expr_ty a;
24367
3.05k
        expr_ty expressions_var;
24368
3.05k
        expr_ty name_var;
24369
3.05k
        if (
24370
3.05k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
24371
3.05k
            &&
24372
3.05k
            (a = expression_rule(p))  // expression
24373
3.05k
            &&
24374
3.05k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
24375
3.05k
            &&
24376
3.05k
            (expressions_var = expressions_rule(p))  // expressions
24377
3.05k
            &&
24378
3.05k
            (_keyword_1 = _PyPegen_expect_token(p, 685))  // token='as'
24379
3.05k
            &&
24380
3.05k
            (name_var = _PyPegen_name_token(p))  // NAME
24381
3.05k
            &&
24382
3.05k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
24383
3.05k
        )
24384
1
        {
24385
1
            D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions 'as' NAME ':'"));
24386
1
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "multiple exception types must be parenthesized when using 'as'" );
24387
1
            if (_res == NULL && PyErr_Occurred()) {
24388
1
                p->error_indicator = 1;
24389
1
                p->level--;
24390
1
                return NULL;
24391
1
            }
24392
0
            goto done;
24393
1
        }
24394
3.05k
        p->mark = _mark;
24395
3.05k
        D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24396
3.05k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ',' expressions 'as' NAME ':'"));
24397
3.05k
    }
24398
0
    { // 'except' expression ['as' NAME] NEWLINE
24399
3.05k
        if (p->error_indicator) {
24400
1
            p->level--;
24401
1
            return NULL;
24402
1
        }
24403
3.05k
        D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] NEWLINE"));
24404
3.05k
        void *_opt_var;
24405
3.05k
        UNUSED(_opt_var); // Silence compiler warnings
24406
3.05k
        Token * a;
24407
3.05k
        expr_ty expression_var;
24408
3.05k
        Token * newline_var;
24409
3.05k
        if (
24410
3.05k
            (a = _PyPegen_expect_token(p, 682))  // token='except'
24411
3.05k
            &&
24412
3.05k
            (expression_var = expression_rule(p))  // expression
24413
3.05k
            &&
24414
3.05k
            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
24415
3.05k
            &&
24416
3.05k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24417
3.05k
        )
24418
3
        {
24419
3
            D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] NEWLINE"));
24420
3
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
24421
3
            if (_res == NULL && PyErr_Occurred()) {
24422
3
                p->error_indicator = 1;
24423
3
                p->level--;
24424
3
                return NULL;
24425
3
            }
24426
0
            goto done;
24427
3
        }
24428
3.05k
        p->mark = _mark;
24429
3.05k
        D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24430
3.05k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] NEWLINE"));
24431
3.05k
    }
24432
0
    { // 'except' NEWLINE
24433
3.05k
        if (p->error_indicator) {
24434
0
            p->level--;
24435
0
            return NULL;
24436
0
        }
24437
3.05k
        D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' NEWLINE"));
24438
3.05k
        Token * a;
24439
3.05k
        Token * newline_var;
24440
3.05k
        if (
24441
3.05k
            (a = _PyPegen_expect_token(p, 682))  // token='except'
24442
3.05k
            &&
24443
3.05k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24444
3.05k
        )
24445
7
        {
24446
7
            D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' NEWLINE"));
24447
7
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
24448
7
            if (_res == NULL && PyErr_Occurred()) {
24449
7
                p->error_indicator = 1;
24450
7
                p->level--;
24451
7
                return NULL;
24452
7
            }
24453
0
            goto done;
24454
7
        }
24455
3.04k
        p->mark = _mark;
24456
3.04k
        D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24457
3.04k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' NEWLINE"));
24458
3.04k
    }
24459
0
    { // 'except' expression 'as' expression ':' block
24460
3.04k
        if (p->error_indicator) {
24461
0
            p->level--;
24462
0
            return NULL;
24463
0
        }
24464
3.04k
        D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression 'as' expression ':' block"));
24465
3.04k
        Token * _keyword;
24466
3.04k
        Token * _keyword_1;
24467
3.04k
        Token * _literal;
24468
3.04k
        expr_ty a;
24469
3.04k
        asdl_stmt_seq* block_var;
24470
3.04k
        expr_ty expression_var;
24471
3.04k
        if (
24472
3.04k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
24473
3.04k
            &&
24474
3.04k
            (expression_var = expression_rule(p))  // expression
24475
3.04k
            &&
24476
3.04k
            (_keyword_1 = _PyPegen_expect_token(p, 685))  // token='as'
24477
3.04k
            &&
24478
3.04k
            (a = expression_rule(p))  // expression
24479
3.04k
            &&
24480
3.04k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24481
3.04k
            &&
24482
3.04k
            (block_var = block_rule(p))  // block
24483
3.04k
        )
24484
1
        {
24485
1
            D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression 'as' expression ':' block"));
24486
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use except statement with %s" , _PyPegen_get_expr_name ( a ) );
24487
1
            if (_res == NULL && PyErr_Occurred()) {
24488
1
                p->error_indicator = 1;
24489
1
                p->level--;
24490
1
                return NULL;
24491
1
            }
24492
0
            goto done;
24493
1
        }
24494
3.04k
        p->mark = _mark;
24495
3.04k
        D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24496
3.04k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression 'as' expression ':' block"));
24497
3.04k
    }
24498
0
    _res = NULL;
24499
3.04k
  done:
24500
3.04k
    p->level--;
24501
3.04k
    return _res;
24502
3.04k
}
24503
24504
// invalid_except_star_stmt:
24505
//     | 'except' '*' expression ',' expressions 'as' NAME ':'
24506
//     | 'except' '*' expression ['as' NAME] NEWLINE
24507
//     | 'except' '*' (NEWLINE | ':')
24508
//     | 'except' '*' expression 'as' expression ':' block
24509
static void *
24510
invalid_except_star_stmt_rule(Parser *p)
24511
2.18k
{
24512
2.18k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
24513
0
        _Pypegen_stack_overflow(p);
24514
0
    }
24515
2.18k
    if (p->error_indicator) {
24516
0
        p->level--;
24517
0
        return NULL;
24518
0
    }
24519
2.18k
    void * _res = NULL;
24520
2.18k
    int _mark = p->mark;
24521
2.18k
    { // 'except' '*' expression ',' expressions 'as' NAME ':'
24522
2.18k
        if (p->error_indicator) {
24523
0
            p->level--;
24524
0
            return NULL;
24525
0
        }
24526
2.18k
        D(fprintf(stderr, "%*c> invalid_except_star_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ',' expressions 'as' NAME ':'"));
24527
2.18k
        Token * _keyword;
24528
2.18k
        Token * _keyword_1;
24529
2.18k
        Token * _literal;
24530
2.18k
        Token * _literal_1;
24531
2.18k
        Token * _literal_2;
24532
2.18k
        expr_ty a;
24533
2.18k
        expr_ty expressions_var;
24534
2.18k
        expr_ty name_var;
24535
2.18k
        if (
24536
2.18k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
24537
2.18k
            &&
24538
2.18k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
24539
2.18k
            &&
24540
2.18k
            (a = expression_rule(p))  // expression
24541
2.18k
            &&
24542
2.18k
            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
24543
2.18k
            &&
24544
2.18k
            (expressions_var = expressions_rule(p))  // expressions
24545
2.18k
            &&
24546
2.18k
            (_keyword_1 = _PyPegen_expect_token(p, 685))  // token='as'
24547
2.18k
            &&
24548
2.18k
            (name_var = _PyPegen_name_token(p))  // NAME
24549
2.18k
            &&
24550
2.18k
            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
24551
2.18k
        )
24552
1
        {
24553
1
            D(fprintf(stderr, "%*c+ invalid_except_star_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ',' expressions 'as' NAME ':'"));
24554
1
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "multiple exception types must be parenthesized when using 'as'" );
24555
1
            if (_res == NULL && PyErr_Occurred()) {
24556
1
                p->error_indicator = 1;
24557
1
                p->level--;
24558
1
                return NULL;
24559
1
            }
24560
0
            goto done;
24561
1
        }
24562
2.18k
        p->mark = _mark;
24563
2.18k
        D(fprintf(stderr, "%*c%s invalid_except_star_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24564
2.18k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression ',' expressions 'as' NAME ':'"));
24565
2.18k
    }
24566
0
    { // 'except' '*' expression ['as' NAME] NEWLINE
24567
2.18k
        if (p->error_indicator) {
24568
1
            p->level--;
24569
1
            return NULL;
24570
1
        }
24571
2.18k
        D(fprintf(stderr, "%*c> invalid_except_star_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ['as' NAME] NEWLINE"));
24572
2.18k
        Token * _literal;
24573
2.18k
        void *_opt_var;
24574
2.18k
        UNUSED(_opt_var); // Silence compiler warnings
24575
2.18k
        Token * a;
24576
2.18k
        expr_ty expression_var;
24577
2.18k
        Token * newline_var;
24578
2.18k
        if (
24579
2.18k
            (a = _PyPegen_expect_token(p, 682))  // token='except'
24580
2.18k
            &&
24581
2.18k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
24582
2.18k
            &&
24583
2.18k
            (expression_var = expression_rule(p))  // expression
24584
2.18k
            &&
24585
2.18k
            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
24586
2.18k
            &&
24587
2.18k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24588
2.18k
        )
24589
4
        {
24590
4
            D(fprintf(stderr, "%*c+ invalid_except_star_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ['as' NAME] NEWLINE"));
24591
4
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
24592
4
            if (_res == NULL && PyErr_Occurred()) {
24593
4
                p->error_indicator = 1;
24594
4
                p->level--;
24595
4
                return NULL;
24596
4
            }
24597
0
            goto done;
24598
4
        }
24599
2.18k
        p->mark = _mark;
24600
2.18k
        D(fprintf(stderr, "%*c%s invalid_except_star_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24601
2.18k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression ['as' NAME] NEWLINE"));
24602
2.18k
    }
24603
0
    { // 'except' '*' (NEWLINE | ':')
24604
2.18k
        if (p->error_indicator) {
24605
0
            p->level--;
24606
0
            return NULL;
24607
0
        }
24608
2.18k
        D(fprintf(stderr, "%*c> invalid_except_star_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')"));
24609
2.18k
        Token * _literal;
24610
2.18k
        void *_tmp_145_var;
24611
2.18k
        Token * a;
24612
2.18k
        if (
24613
2.18k
            (a = _PyPegen_expect_token(p, 682))  // token='except'
24614
2.18k
            &&
24615
2.18k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
24616
2.18k
            &&
24617
2.18k
            (_tmp_145_var = _tmp_145_rule(p))  // NEWLINE | ':'
24618
2.18k
        )
24619
6
        {
24620
6
            D(fprintf(stderr, "%*c+ invalid_except_star_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')"));
24621
6
            _res = RAISE_SYNTAX_ERROR ( "expected one or more exception types" );
24622
6
            if (_res == NULL && PyErr_Occurred()) {
24623
6
                p->error_indicator = 1;
24624
6
                p->level--;
24625
6
                return NULL;
24626
6
            }
24627
0
            goto done;
24628
6
        }
24629
2.17k
        p->mark = _mark;
24630
2.17k
        D(fprintf(stderr, "%*c%s invalid_except_star_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24631
2.17k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' (NEWLINE | ':')"));
24632
2.17k
    }
24633
0
    { // 'except' '*' expression 'as' expression ':' block
24634
2.17k
        if (p->error_indicator) {
24635
0
            p->level--;
24636
0
            return NULL;
24637
0
        }
24638
2.17k
        D(fprintf(stderr, "%*c> invalid_except_star_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression 'as' expression ':' block"));
24639
2.17k
        Token * _keyword;
24640
2.17k
        Token * _keyword_1;
24641
2.17k
        Token * _literal;
24642
2.17k
        Token * _literal_1;
24643
2.17k
        expr_ty a;
24644
2.17k
        asdl_stmt_seq* block_var;
24645
2.17k
        expr_ty expression_var;
24646
2.17k
        if (
24647
2.17k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
24648
2.17k
            &&
24649
2.17k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
24650
2.17k
            &&
24651
2.17k
            (expression_var = expression_rule(p))  // expression
24652
2.17k
            &&
24653
2.17k
            (_keyword_1 = _PyPegen_expect_token(p, 685))  // token='as'
24654
2.17k
            &&
24655
2.17k
            (a = expression_rule(p))  // expression
24656
2.17k
            &&
24657
2.17k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
24658
2.17k
            &&
24659
2.17k
            (block_var = block_rule(p))  // block
24660
2.17k
        )
24661
1
        {
24662
1
            D(fprintf(stderr, "%*c+ invalid_except_star_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression 'as' expression ':' block"));
24663
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use except* statement with %s" , _PyPegen_get_expr_name ( a ) );
24664
1
            if (_res == NULL && PyErr_Occurred()) {
24665
1
                p->error_indicator = 1;
24666
1
                p->level--;
24667
1
                return NULL;
24668
1
            }
24669
0
            goto done;
24670
1
        }
24671
2.17k
        p->mark = _mark;
24672
2.17k
        D(fprintf(stderr, "%*c%s invalid_except_star_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24673
2.17k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression 'as' expression ':' block"));
24674
2.17k
    }
24675
0
    _res = NULL;
24676
2.17k
  done:
24677
2.17k
    p->level--;
24678
2.17k
    return _res;
24679
2.17k
}
24680
24681
// invalid_finally_stmt: 'finally' ':' NEWLINE !INDENT
24682
static void *
24683
invalid_finally_stmt_rule(Parser *p)
24684
2.90k
{
24685
2.90k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
24686
0
        _Pypegen_stack_overflow(p);
24687
0
    }
24688
2.90k
    if (p->error_indicator) {
24689
0
        p->level--;
24690
0
        return NULL;
24691
0
    }
24692
2.90k
    void * _res = NULL;
24693
2.90k
    int _mark = p->mark;
24694
2.90k
    { // 'finally' ':' NEWLINE !INDENT
24695
2.90k
        if (p->error_indicator) {
24696
0
            p->level--;
24697
0
            return NULL;
24698
0
        }
24699
2.90k
        D(fprintf(stderr, "%*c> invalid_finally_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' ':' NEWLINE !INDENT"));
24700
2.90k
        Token * _literal;
24701
2.90k
        Token * a;
24702
2.90k
        Token * newline_var;
24703
2.90k
        if (
24704
2.90k
            (a = _PyPegen_expect_token(p, 678))  // token='finally'
24705
2.90k
            &&
24706
2.90k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24707
2.90k
            &&
24708
2.90k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24709
2.90k
            &&
24710
2.90k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
24711
2.90k
        )
24712
1
        {
24713
1
            D(fprintf(stderr, "%*c+ invalid_finally_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' ':' NEWLINE !INDENT"));
24714
1
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'finally' statement on line %d" , a -> lineno );
24715
1
            if (_res == NULL && PyErr_Occurred()) {
24716
1
                p->error_indicator = 1;
24717
1
                p->level--;
24718
1
                return NULL;
24719
1
            }
24720
0
            goto done;
24721
1
        }
24722
2.90k
        p->mark = _mark;
24723
2.90k
        D(fprintf(stderr, "%*c%s invalid_finally_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24724
2.90k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' ':' NEWLINE !INDENT"));
24725
2.90k
    }
24726
0
    _res = NULL;
24727
2.90k
  done:
24728
2.90k
    p->level--;
24729
2.90k
    return _res;
24730
2.90k
}
24731
24732
// invalid_except_stmt_indent:
24733
//     | 'except' expression ['as' NAME] ':' NEWLINE !INDENT
24734
//     | 'except' ':' NEWLINE !INDENT
24735
static void *
24736
invalid_except_stmt_indent_rule(Parser *p)
24737
5.90k
{
24738
5.90k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
24739
0
        _Pypegen_stack_overflow(p);
24740
0
    }
24741
5.90k
    if (p->error_indicator) {
24742
0
        p->level--;
24743
0
        return NULL;
24744
0
    }
24745
5.90k
    void * _res = NULL;
24746
5.90k
    int _mark = p->mark;
24747
5.90k
    { // 'except' expression ['as' NAME] ':' NEWLINE !INDENT
24748
5.90k
        if (p->error_indicator) {
24749
0
            p->level--;
24750
0
            return NULL;
24751
0
        }
24752
5.90k
        D(fprintf(stderr, "%*c> invalid_except_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT"));
24753
5.90k
        Token * _literal;
24754
5.90k
        void *_opt_var;
24755
5.90k
        UNUSED(_opt_var); // Silence compiler warnings
24756
5.90k
        Token * a;
24757
5.90k
        expr_ty expression_var;
24758
5.90k
        Token * newline_var;
24759
5.90k
        if (
24760
5.90k
            (a = _PyPegen_expect_token(p, 682))  // token='except'
24761
5.90k
            &&
24762
5.90k
            (expression_var = expression_rule(p))  // expression
24763
5.90k
            &&
24764
5.90k
            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
24765
5.90k
            &&
24766
5.90k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24767
5.90k
            &&
24768
5.90k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24769
5.90k
            &&
24770
5.90k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
24771
5.90k
        )
24772
1
        {
24773
1
            D(fprintf(stderr, "%*c+ invalid_except_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT"));
24774
1
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'except' statement on line %d" , a -> lineno );
24775
1
            if (_res == NULL && PyErr_Occurred()) {
24776
1
                p->error_indicator = 1;
24777
1
                p->level--;
24778
1
                return NULL;
24779
1
            }
24780
0
            goto done;
24781
1
        }
24782
5.90k
        p->mark = _mark;
24783
5.90k
        D(fprintf(stderr, "%*c%s invalid_except_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
24784
5.90k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT"));
24785
5.90k
    }
24786
0
    { // 'except' ':' NEWLINE !INDENT
24787
5.90k
        if (p->error_indicator) {
24788
2
            p->level--;
24789
2
            return NULL;
24790
2
        }
24791
5.90k
        D(fprintf(stderr, "%*c> invalid_except_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' NEWLINE !INDENT"));
24792
5.90k
        Token * _literal;
24793
5.90k
        Token * a;
24794
5.90k
        Token * newline_var;
24795
5.90k
        if (
24796
5.90k
            (a = _PyPegen_expect_token(p, 682))  // token='except'
24797
5.90k
            &&
24798
5.90k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24799
5.90k
            &&
24800
5.90k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24801
5.90k
            &&
24802
5.90k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
24803
5.90k
        )
24804
1
        {
24805
1
            D(fprintf(stderr, "%*c+ invalid_except_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' ':' NEWLINE !INDENT"));
24806
1
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'except' statement on line %d" , a -> lineno );
24807
1
            if (_res == NULL && PyErr_Occurred()) {
24808
1
                p->error_indicator = 1;
24809
1
                p->level--;
24810
1
                return NULL;
24811
1
            }
24812
0
            goto done;
24813
1
        }
24814
5.90k
        p->mark = _mark;
24815
5.90k
        D(fprintf(stderr, "%*c%s invalid_except_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
24816
5.90k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' ':' NEWLINE !INDENT"));
24817
5.90k
    }
24818
0
    _res = NULL;
24819
5.90k
  done:
24820
5.90k
    p->level--;
24821
5.90k
    return _res;
24822
5.90k
}
24823
24824
// invalid_except_star_stmt_indent:
24825
//     | 'except' '*' expression ['as' NAME] ':' NEWLINE !INDENT
24826
static void *
24827
invalid_except_star_stmt_indent_rule(Parser *p)
24828
3.46k
{
24829
3.46k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
24830
0
        _Pypegen_stack_overflow(p);
24831
0
    }
24832
3.46k
    if (p->error_indicator) {
24833
0
        p->level--;
24834
0
        return NULL;
24835
0
    }
24836
3.46k
    void * _res = NULL;
24837
3.46k
    int _mark = p->mark;
24838
3.46k
    { // 'except' '*' expression ['as' NAME] ':' NEWLINE !INDENT
24839
3.46k
        if (p->error_indicator) {
24840
0
            p->level--;
24841
0
            return NULL;
24842
0
        }
24843
3.46k
        D(fprintf(stderr, "%*c> invalid_except_star_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ['as' NAME] ':' NEWLINE !INDENT"));
24844
3.46k
        Token * _literal;
24845
3.46k
        Token * _literal_1;
24846
3.46k
        void *_opt_var;
24847
3.46k
        UNUSED(_opt_var); // Silence compiler warnings
24848
3.46k
        Token * a;
24849
3.46k
        expr_ty expression_var;
24850
3.46k
        Token * newline_var;
24851
3.46k
        if (
24852
3.46k
            (a = _PyPegen_expect_token(p, 682))  // token='except'
24853
3.46k
            &&
24854
3.46k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
24855
3.46k
            &&
24856
3.46k
            (expression_var = expression_rule(p))  // expression
24857
3.46k
            &&
24858
3.46k
            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
24859
3.46k
            &&
24860
3.46k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
24861
3.46k
            &&
24862
3.46k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24863
3.46k
            &&
24864
3.46k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
24865
3.46k
        )
24866
3
        {
24867
3
            D(fprintf(stderr, "%*c+ invalid_except_star_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ['as' NAME] ':' NEWLINE !INDENT"));
24868
3
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'except*' statement on line %d" , a -> lineno );
24869
3
            if (_res == NULL && PyErr_Occurred()) {
24870
3
                p->error_indicator = 1;
24871
3
                p->level--;
24872
3
                return NULL;
24873
3
            }
24874
0
            goto done;
24875
3
        }
24876
3.46k
        p->mark = _mark;
24877
3.46k
        D(fprintf(stderr, "%*c%s invalid_except_star_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
24878
3.46k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression ['as' NAME] ':' NEWLINE !INDENT"));
24879
3.46k
    }
24880
0
    _res = NULL;
24881
3.46k
  done:
24882
3.46k
    p->level--;
24883
3.46k
    return _res;
24884
3.46k
}
24885
24886
// invalid_match_stmt:
24887
//     | "match" subject_expr NEWLINE
24888
//     | "match" subject_expr ':' NEWLINE !INDENT
24889
static void *
24890
invalid_match_stmt_rule(Parser *p)
24891
19.8k
{
24892
19.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
24893
0
        _Pypegen_stack_overflow(p);
24894
0
    }
24895
19.8k
    if (p->error_indicator) {
24896
0
        p->level--;
24897
0
        return NULL;
24898
0
    }
24899
19.8k
    void * _res = NULL;
24900
19.8k
    int _mark = p->mark;
24901
19.8k
    { // "match" subject_expr NEWLINE
24902
19.8k
        if (p->error_indicator) {
24903
0
            p->level--;
24904
0
            return NULL;
24905
0
        }
24906
19.8k
        D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr NEWLINE"));
24907
19.8k
        expr_ty _keyword;
24908
19.8k
        Token * newline_var;
24909
19.8k
        expr_ty subject_expr_var;
24910
19.8k
        if (
24911
19.8k
            (_keyword = _PyPegen_expect_soft_keyword(p, "match"))  // soft_keyword='"match"'
24912
19.8k
            &&
24913
19.8k
            (subject_expr_var = subject_expr_rule(p))  // subject_expr
24914
19.8k
            &&
24915
19.8k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24916
19.8k
        )
24917
6
        {
24918
6
            D(fprintf(stderr, "%*c+ invalid_match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr NEWLINE"));
24919
6
            _res = CHECK_VERSION ( void* , 10 , "Pattern matching is" , RAISE_SYNTAX_ERROR ( "expected ':'" ) );
24920
6
            if (_res == NULL && PyErr_Occurred()) {
24921
6
                p->error_indicator = 1;
24922
6
                p->level--;
24923
6
                return NULL;
24924
6
            }
24925
0
            goto done;
24926
6
        }
24927
19.8k
        p->mark = _mark;
24928
19.8k
        D(fprintf(stderr, "%*c%s invalid_match_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24929
19.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr NEWLINE"));
24930
19.8k
    }
24931
0
    { // "match" subject_expr ':' NEWLINE !INDENT
24932
19.8k
        if (p->error_indicator) {
24933
0
            p->level--;
24934
0
            return NULL;
24935
0
        }
24936
19.8k
        D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT"));
24937
19.8k
        Token * _literal;
24938
19.8k
        expr_ty a;
24939
19.8k
        Token * newline_var;
24940
19.8k
        expr_ty subject;
24941
19.8k
        if (
24942
19.8k
            (a = _PyPegen_expect_soft_keyword(p, "match"))  // soft_keyword='"match"'
24943
19.8k
            &&
24944
19.8k
            (subject = subject_expr_rule(p))  // subject_expr
24945
19.8k
            &&
24946
19.8k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
24947
19.8k
            &&
24948
19.8k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
24949
19.8k
            &&
24950
19.8k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
24951
19.8k
        )
24952
1
        {
24953
1
            D(fprintf(stderr, "%*c+ invalid_match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT"));
24954
1
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'match' statement on line %d" , a -> lineno );
24955
1
            if (_res == NULL && PyErr_Occurred()) {
24956
1
                p->error_indicator = 1;
24957
1
                p->level--;
24958
1
                return NULL;
24959
1
            }
24960
0
            goto done;
24961
1
        }
24962
19.8k
        p->mark = _mark;
24963
19.8k
        D(fprintf(stderr, "%*c%s invalid_match_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24964
19.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT"));
24965
19.8k
    }
24966
0
    _res = NULL;
24967
19.8k
  done:
24968
19.8k
    p->level--;
24969
19.8k
    return _res;
24970
19.8k
}
24971
24972
// invalid_case_block:
24973
//     | "case" patterns guard? NEWLINE
24974
//     | "case" patterns guard? ':' NEWLINE !INDENT
24975
static void *
24976
invalid_case_block_rule(Parser *p)
24977
1.95k
{
24978
1.95k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
24979
0
        _Pypegen_stack_overflow(p);
24980
0
    }
24981
1.95k
    if (p->error_indicator) {
24982
0
        p->level--;
24983
0
        return NULL;
24984
0
    }
24985
1.95k
    void * _res = NULL;
24986
1.95k
    int _mark = p->mark;
24987
1.95k
    { // "case" patterns guard? NEWLINE
24988
1.95k
        if (p->error_indicator) {
24989
0
            p->level--;
24990
0
            return NULL;
24991
0
        }
24992
1.95k
        D(fprintf(stderr, "%*c> invalid_case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? NEWLINE"));
24993
1.95k
        expr_ty _keyword;
24994
1.95k
        void *_opt_var;
24995
1.95k
        UNUSED(_opt_var); // Silence compiler warnings
24996
1.95k
        Token * newline_var;
24997
1.95k
        pattern_ty patterns_var;
24998
1.95k
        if (
24999
1.95k
            (_keyword = _PyPegen_expect_soft_keyword(p, "case"))  // soft_keyword='"case"'
25000
1.95k
            &&
25001
1.95k
            (patterns_var = patterns_rule(p))  // patterns
25002
1.95k
            &&
25003
1.95k
            (_opt_var = guard_rule(p), !p->error_indicator)  // guard?
25004
1.95k
            &&
25005
1.95k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25006
1.95k
        )
25007
50
        {
25008
50
            D(fprintf(stderr, "%*c+ invalid_case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? NEWLINE"));
25009
50
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
25010
50
            if (_res == NULL && PyErr_Occurred()) {
25011
50
                p->error_indicator = 1;
25012
50
                p->level--;
25013
50
                return NULL;
25014
50
            }
25015
0
            goto done;
25016
50
        }
25017
1.90k
        p->mark = _mark;
25018
1.90k
        D(fprintf(stderr, "%*c%s invalid_case_block[%d-%d]: %s failed!\n", p->level, ' ',
25019
1.90k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? NEWLINE"));
25020
1.90k
    }
25021
0
    { // "case" patterns guard? ':' NEWLINE !INDENT
25022
1.90k
        if (p->error_indicator) {
25023
53
            p->level--;
25024
53
            return NULL;
25025
53
        }
25026
1.85k
        D(fprintf(stderr, "%*c> invalid_case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT"));
25027
1.85k
        Token * _literal;
25028
1.85k
        void *_opt_var;
25029
1.85k
        UNUSED(_opt_var); // Silence compiler warnings
25030
1.85k
        expr_ty a;
25031
1.85k
        Token * newline_var;
25032
1.85k
        pattern_ty patterns_var;
25033
1.85k
        if (
25034
1.85k
            (a = _PyPegen_expect_soft_keyword(p, "case"))  // soft_keyword='"case"'
25035
1.85k
            &&
25036
1.85k
            (patterns_var = patterns_rule(p))  // patterns
25037
1.85k
            &&
25038
1.85k
            (_opt_var = guard_rule(p), !p->error_indicator)  // guard?
25039
1.85k
            &&
25040
1.85k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
25041
1.85k
            &&
25042
1.85k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25043
1.85k
            &&
25044
1.85k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
25045
1.85k
        )
25046
10
        {
25047
10
            D(fprintf(stderr, "%*c+ invalid_case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT"));
25048
10
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'case' statement on line %d" , a -> lineno );
25049
10
            if (_res == NULL && PyErr_Occurred()) {
25050
10
                p->error_indicator = 1;
25051
10
                p->level--;
25052
10
                return NULL;
25053
10
            }
25054
0
            goto done;
25055
10
        }
25056
1.84k
        p->mark = _mark;
25057
1.84k
        D(fprintf(stderr, "%*c%s invalid_case_block[%d-%d]: %s failed!\n", p->level, ' ',
25058
1.84k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT"));
25059
1.84k
    }
25060
0
    _res = NULL;
25061
1.84k
  done:
25062
1.84k
    p->level--;
25063
1.84k
    return _res;
25064
1.84k
}
25065
25066
// invalid_as_pattern: or_pattern 'as' "_" | or_pattern 'as' expression
25067
static void *
25068
invalid_as_pattern_rule(Parser *p)
25069
41.0k
{
25070
41.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25071
0
        _Pypegen_stack_overflow(p);
25072
0
    }
25073
41.0k
    if (p->error_indicator) {
25074
0
        p->level--;
25075
0
        return NULL;
25076
0
    }
25077
41.0k
    void * _res = NULL;
25078
41.0k
    int _mark = p->mark;
25079
41.0k
    { // or_pattern 'as' "_"
25080
41.0k
        if (p->error_indicator) {
25081
0
            p->level--;
25082
0
            return NULL;
25083
0
        }
25084
41.0k
        D(fprintf(stderr, "%*c> invalid_as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' \"_\""));
25085
41.0k
        Token * _keyword;
25086
41.0k
        expr_ty a;
25087
41.0k
        pattern_ty or_pattern_var;
25088
41.0k
        if (
25089
41.0k
            (or_pattern_var = or_pattern_rule(p))  // or_pattern
25090
41.0k
            &&
25091
41.0k
            (_keyword = _PyPegen_expect_token(p, 685))  // token='as'
25092
41.0k
            &&
25093
41.0k
            (a = _PyPegen_expect_soft_keyword(p, "_"))  // soft_keyword='"_"'
25094
41.0k
        )
25095
1
        {
25096
1
            D(fprintf(stderr, "%*c+ invalid_as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' \"_\""));
25097
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use '_' as a target" );
25098
1
            if (_res == NULL && PyErr_Occurred()) {
25099
1
                p->error_indicator = 1;
25100
1
                p->level--;
25101
1
                return NULL;
25102
1
            }
25103
0
            goto done;
25104
1
        }
25105
41.0k
        p->mark = _mark;
25106
41.0k
        D(fprintf(stderr, "%*c%s invalid_as_pattern[%d-%d]: %s failed!\n", p->level, ' ',
25107
41.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' \"_\""));
25108
41.0k
    }
25109
0
    { // or_pattern 'as' expression
25110
41.0k
        if (p->error_indicator) {
25111
0
            p->level--;
25112
0
            return NULL;
25113
0
        }
25114
41.0k
        D(fprintf(stderr, "%*c> invalid_as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' expression"));
25115
41.0k
        Token * _keyword;
25116
41.0k
        expr_ty a;
25117
41.0k
        pattern_ty or_pattern_var;
25118
41.0k
        if (
25119
41.0k
            (or_pattern_var = or_pattern_rule(p))  // or_pattern
25120
41.0k
            &&
25121
41.0k
            (_keyword = _PyPegen_expect_token(p, 685))  // token='as'
25122
41.0k
            &&
25123
41.0k
            (a = expression_rule(p))  // expression
25124
41.0k
        )
25125
1
        {
25126
1
            D(fprintf(stderr, "%*c+ invalid_as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' expression"));
25127
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use %s as pattern target" , _PyPegen_get_expr_name ( a ) );
25128
1
            if (_res == NULL && PyErr_Occurred()) {
25129
1
                p->error_indicator = 1;
25130
1
                p->level--;
25131
1
                return NULL;
25132
1
            }
25133
0
            goto done;
25134
1
        }
25135
41.0k
        p->mark = _mark;
25136
41.0k
        D(fprintf(stderr, "%*c%s invalid_as_pattern[%d-%d]: %s failed!\n", p->level, ' ',
25137
41.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' expression"));
25138
41.0k
    }
25139
0
    _res = NULL;
25140
41.0k
  done:
25141
41.0k
    p->level--;
25142
41.0k
    return _res;
25143
41.0k
}
25144
25145
// invalid_class_pattern: name_or_attr '(' invalid_class_argument_pattern
25146
static void *
25147
invalid_class_pattern_rule(Parser *p)
25148
7.59k
{
25149
7.59k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25150
0
        _Pypegen_stack_overflow(p);
25151
0
    }
25152
7.59k
    if (p->error_indicator) {
25153
0
        p->level--;
25154
0
        return NULL;
25155
0
    }
25156
7.59k
    void * _res = NULL;
25157
7.59k
    int _mark = p->mark;
25158
7.59k
    { // name_or_attr '(' invalid_class_argument_pattern
25159
7.59k
        if (p->error_indicator) {
25160
0
            p->level--;
25161
0
            return NULL;
25162
0
        }
25163
7.59k
        D(fprintf(stderr, "%*c> invalid_class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' invalid_class_argument_pattern"));
25164
7.59k
        Token * _literal;
25165
7.59k
        asdl_pattern_seq* a;
25166
7.59k
        expr_ty name_or_attr_var;
25167
7.59k
        if (
25168
7.59k
            (name_or_attr_var = name_or_attr_rule(p))  // name_or_attr
25169
7.59k
            &&
25170
7.59k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
25171
7.59k
            &&
25172
7.59k
            (a = invalid_class_argument_pattern_rule(p))  // invalid_class_argument_pattern
25173
7.59k
        )
25174
567
        {
25175
567
            D(fprintf(stderr, "%*c+ invalid_class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' invalid_class_argument_pattern"));
25176
567
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( PyPegen_first_item ( a , pattern_ty ) , PyPegen_last_item ( a , pattern_ty ) , "positional patterns follow keyword patterns" );
25177
567
            if (_res == NULL && PyErr_Occurred()) {
25178
567
                p->error_indicator = 1;
25179
567
                p->level--;
25180
567
                return NULL;
25181
567
            }
25182
0
            goto done;
25183
567
        }
25184
7.02k
        p->mark = _mark;
25185
7.02k
        D(fprintf(stderr, "%*c%s invalid_class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
25186
7.02k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' invalid_class_argument_pattern"));
25187
7.02k
    }
25188
0
    _res = NULL;
25189
7.02k
  done:
25190
7.02k
    p->level--;
25191
7.02k
    return _res;
25192
7.02k
}
25193
25194
// invalid_class_argument_pattern:
25195
//     | [positional_patterns ','] keyword_patterns ',' positional_patterns
25196
static asdl_pattern_seq*
25197
invalid_class_argument_pattern_rule(Parser *p)
25198
2.80k
{
25199
2.80k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25200
0
        _Pypegen_stack_overflow(p);
25201
0
    }
25202
2.80k
    if (p->error_indicator) {
25203
0
        p->level--;
25204
0
        return NULL;
25205
0
    }
25206
2.80k
    asdl_pattern_seq* _res = NULL;
25207
2.80k
    int _mark = p->mark;
25208
2.80k
    { // [positional_patterns ','] keyword_patterns ',' positional_patterns
25209
2.80k
        if (p->error_indicator) {
25210
0
            p->level--;
25211
0
            return NULL;
25212
0
        }
25213
2.80k
        D(fprintf(stderr, "%*c> invalid_class_argument_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[positional_patterns ','] keyword_patterns ',' positional_patterns"));
25214
2.80k
        Token * _literal;
25215
2.80k
        void *_opt_var;
25216
2.80k
        UNUSED(_opt_var); // Silence compiler warnings
25217
2.80k
        asdl_pattern_seq* a;
25218
2.80k
        asdl_seq* keyword_patterns_var;
25219
2.80k
        if (
25220
2.80k
            (_opt_var = _tmp_146_rule(p), !p->error_indicator)  // [positional_patterns ',']
25221
2.80k
            &&
25222
2.80k
            (keyword_patterns_var = keyword_patterns_rule(p))  // keyword_patterns
25223
2.80k
            &&
25224
2.80k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
25225
2.80k
            &&
25226
2.80k
            (a = positional_patterns_rule(p))  // positional_patterns
25227
2.80k
        )
25228
567
        {
25229
567
            D(fprintf(stderr, "%*c+ invalid_class_argument_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "[positional_patterns ','] keyword_patterns ',' positional_patterns"));
25230
567
            _res = a;
25231
567
            if (_res == NULL && PyErr_Occurred()) {
25232
0
                p->error_indicator = 1;
25233
0
                p->level--;
25234
0
                return NULL;
25235
0
            }
25236
567
            goto done;
25237
567
        }
25238
2.23k
        p->mark = _mark;
25239
2.23k
        D(fprintf(stderr, "%*c%s invalid_class_argument_pattern[%d-%d]: %s failed!\n", p->level, ' ',
25240
2.23k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "[positional_patterns ','] keyword_patterns ',' positional_patterns"));
25241
2.23k
    }
25242
0
    _res = NULL;
25243
2.80k
  done:
25244
2.80k
    p->level--;
25245
2.80k
    return _res;
25246
2.23k
}
25247
25248
// invalid_if_stmt:
25249
//     | 'if' named_expression NEWLINE
25250
//     | 'if' named_expression ':' NEWLINE !INDENT
25251
static void *
25252
invalid_if_stmt_rule(Parser *p)
25253
718
{
25254
718
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25255
0
        _Pypegen_stack_overflow(p);
25256
0
    }
25257
718
    if (p->error_indicator) {
25258
0
        p->level--;
25259
0
        return NULL;
25260
0
    }
25261
718
    void * _res = NULL;
25262
718
    int _mark = p->mark;
25263
718
    { // 'if' named_expression NEWLINE
25264
718
        if (p->error_indicator) {
25265
0
            p->level--;
25266
0
            return NULL;
25267
0
        }
25268
718
        D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE"));
25269
718
        Token * _keyword;
25270
718
        expr_ty named_expression_var;
25271
718
        Token * newline_var;
25272
718
        if (
25273
718
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
25274
718
            &&
25275
718
            (named_expression_var = named_expression_rule(p))  // named_expression
25276
718
            &&
25277
718
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25278
718
        )
25279
4
        {
25280
4
            D(fprintf(stderr, "%*c+ invalid_if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE"));
25281
4
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
25282
4
            if (_res == NULL && PyErr_Occurred()) {
25283
4
                p->error_indicator = 1;
25284
4
                p->level--;
25285
4
                return NULL;
25286
4
            }
25287
0
            goto done;
25288
4
        }
25289
714
        p->mark = _mark;
25290
714
        D(fprintf(stderr, "%*c%s invalid_if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25291
714
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression NEWLINE"));
25292
714
    }
25293
0
    { // 'if' named_expression ':' NEWLINE !INDENT
25294
714
        if (p->error_indicator) {
25295
2
            p->level--;
25296
2
            return NULL;
25297
2
        }
25298
712
        D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT"));
25299
712
        Token * _literal;
25300
712
        Token * a;
25301
712
        expr_ty a_1;
25302
712
        Token * newline_var;
25303
712
        if (
25304
712
            (a = _PyPegen_expect_token(p, 687))  // token='if'
25305
712
            &&
25306
712
            (a_1 = named_expression_rule(p))  // named_expression
25307
712
            &&
25308
712
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
25309
712
            &&
25310
712
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25311
712
            &&
25312
712
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
25313
712
        )
25314
3
        {
25315
3
            D(fprintf(stderr, "%*c+ invalid_if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT"));
25316
3
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'if' statement on line %d" , a -> lineno );
25317
3
            if (_res == NULL && PyErr_Occurred()) {
25318
3
                p->error_indicator = 1;
25319
3
                p->level--;
25320
3
                return NULL;
25321
3
            }
25322
0
            goto done;
25323
3
        }
25324
709
        p->mark = _mark;
25325
709
        D(fprintf(stderr, "%*c%s invalid_if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25326
709
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT"));
25327
709
    }
25328
0
    _res = NULL;
25329
709
  done:
25330
709
    p->level--;
25331
709
    return _res;
25332
709
}
25333
25334
// invalid_elif_stmt:
25335
//     | 'elif' named_expression NEWLINE
25336
//     | 'elif' named_expression ':' NEWLINE !INDENT
25337
static void *
25338
invalid_elif_stmt_rule(Parser *p)
25339
1.00k
{
25340
1.00k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25341
0
        _Pypegen_stack_overflow(p);
25342
0
    }
25343
1.00k
    if (p->error_indicator) {
25344
0
        p->level--;
25345
0
        return NULL;
25346
0
    }
25347
1.00k
    void * _res = NULL;
25348
1.00k
    int _mark = p->mark;
25349
1.00k
    { // 'elif' named_expression NEWLINE
25350
1.00k
        if (p->error_indicator) {
25351
0
            p->level--;
25352
0
            return NULL;
25353
0
        }
25354
1.00k
        D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE"));
25355
1.00k
        Token * _keyword;
25356
1.00k
        expr_ty named_expression_var;
25357
1.00k
        Token * newline_var;
25358
1.00k
        if (
25359
1.00k
            (_keyword = _PyPegen_expect_token(p, 692))  // token='elif'
25360
1.00k
            &&
25361
1.00k
            (named_expression_var = named_expression_rule(p))  // named_expression
25362
1.00k
            &&
25363
1.00k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25364
1.00k
        )
25365
1
        {
25366
1
            D(fprintf(stderr, "%*c+ invalid_elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE"));
25367
1
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
25368
1
            if (_res == NULL && PyErr_Occurred()) {
25369
1
                p->error_indicator = 1;
25370
1
                p->level--;
25371
1
                return NULL;
25372
1
            }
25373
0
            goto done;
25374
1
        }
25375
1.00k
        p->mark = _mark;
25376
1.00k
        D(fprintf(stderr, "%*c%s invalid_elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25377
1.00k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression NEWLINE"));
25378
1.00k
    }
25379
0
    { // 'elif' named_expression ':' NEWLINE !INDENT
25380
1.00k
        if (p->error_indicator) {
25381
1
            p->level--;
25382
1
            return NULL;
25383
1
        }
25384
1.00k
        D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT"));
25385
1.00k
        Token * _literal;
25386
1.00k
        Token * a;
25387
1.00k
        expr_ty named_expression_var;
25388
1.00k
        Token * newline_var;
25389
1.00k
        if (
25390
1.00k
            (a = _PyPegen_expect_token(p, 692))  // token='elif'
25391
1.00k
            &&
25392
1.00k
            (named_expression_var = named_expression_rule(p))  // named_expression
25393
1.00k
            &&
25394
1.00k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
25395
1.00k
            &&
25396
1.00k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25397
1.00k
            &&
25398
1.00k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
25399
1.00k
        )
25400
7
        {
25401
7
            D(fprintf(stderr, "%*c+ invalid_elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT"));
25402
7
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'elif' statement on line %d" , a -> lineno );
25403
7
            if (_res == NULL && PyErr_Occurred()) {
25404
7
                p->error_indicator = 1;
25405
7
                p->level--;
25406
7
                return NULL;
25407
7
            }
25408
0
            goto done;
25409
7
        }
25410
1.00k
        p->mark = _mark;
25411
1.00k
        D(fprintf(stderr, "%*c%s invalid_elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25412
1.00k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT"));
25413
1.00k
    }
25414
0
    _res = NULL;
25415
1.00k
  done:
25416
1.00k
    p->level--;
25417
1.00k
    return _res;
25418
1.00k
}
25419
25420
// invalid_else_stmt: 'else' ':' NEWLINE !INDENT | 'else' ':' block 'elif'
25421
static void *
25422
invalid_else_stmt_rule(Parser *p)
25423
2.57k
{
25424
2.57k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25425
0
        _Pypegen_stack_overflow(p);
25426
0
    }
25427
2.57k
    if (p->error_indicator) {
25428
0
        p->level--;
25429
0
        return NULL;
25430
0
    }
25431
2.57k
    void * _res = NULL;
25432
2.57k
    int _mark = p->mark;
25433
2.57k
    { // 'else' ':' NEWLINE !INDENT
25434
2.57k
        if (p->error_indicator) {
25435
0
            p->level--;
25436
0
            return NULL;
25437
0
        }
25438
2.57k
        D(fprintf(stderr, "%*c> invalid_else_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' ':' NEWLINE !INDENT"));
25439
2.57k
        Token * _literal;
25440
2.57k
        Token * a;
25441
2.57k
        Token * newline_var;
25442
2.57k
        if (
25443
2.57k
            (a = _PyPegen_expect_token(p, 691))  // token='else'
25444
2.57k
            &&
25445
2.57k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
25446
2.57k
            &&
25447
2.57k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25448
2.57k
            &&
25449
2.57k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
25450
2.57k
        )
25451
3
        {
25452
3
            D(fprintf(stderr, "%*c+ invalid_else_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' ':' NEWLINE !INDENT"));
25453
3
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'else' statement on line %d" , a -> lineno );
25454
3
            if (_res == NULL && PyErr_Occurred()) {
25455
3
                p->error_indicator = 1;
25456
3
                p->level--;
25457
3
                return NULL;
25458
3
            }
25459
0
            goto done;
25460
3
        }
25461
2.56k
        p->mark = _mark;
25462
2.56k
        D(fprintf(stderr, "%*c%s invalid_else_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25463
2.56k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' ':' NEWLINE !INDENT"));
25464
2.56k
    }
25465
0
    { // 'else' ':' block 'elif'
25466
2.56k
        if (p->error_indicator) {
25467
1
            p->level--;
25468
1
            return NULL;
25469
1
        }
25470
2.56k
        D(fprintf(stderr, "%*c> invalid_else_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' ':' block 'elif'"));
25471
2.56k
        Token * _keyword;
25472
2.56k
        Token * _keyword_1;
25473
2.56k
        Token * _literal;
25474
2.56k
        asdl_stmt_seq* block_var;
25475
2.56k
        if (
25476
2.56k
            (_keyword = _PyPegen_expect_token(p, 691))  // token='else'
25477
2.56k
            &&
25478
2.56k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
25479
2.56k
            &&
25480
2.56k
            (block_var = block_rule(p))  // block
25481
2.56k
            &&
25482
2.56k
            (_keyword_1 = _PyPegen_expect_token(p, 692))  // token='elif'
25483
2.56k
        )
25484
1
        {
25485
1
            D(fprintf(stderr, "%*c+ invalid_else_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' ':' block 'elif'"));
25486
1
            _res = RAISE_SYNTAX_ERROR ( "'elif' block follows an 'else' block" );
25487
1
            if (_res == NULL && PyErr_Occurred()) {
25488
1
                p->error_indicator = 1;
25489
1
                p->level--;
25490
1
                return NULL;
25491
1
            }
25492
0
            goto done;
25493
1
        }
25494
2.56k
        p->mark = _mark;
25495
2.56k
        D(fprintf(stderr, "%*c%s invalid_else_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25496
2.56k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' ':' block 'elif'"));
25497
2.56k
    }
25498
0
    _res = NULL;
25499
2.56k
  done:
25500
2.56k
    p->level--;
25501
2.56k
    return _res;
25502
2.56k
}
25503
25504
// invalid_while_stmt:
25505
//     | 'while' named_expression NEWLINE
25506
//     | 'while' named_expression ':' NEWLINE !INDENT
25507
static void *
25508
invalid_while_stmt_rule(Parser *p)
25509
358
{
25510
358
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25511
0
        _Pypegen_stack_overflow(p);
25512
0
    }
25513
358
    if (p->error_indicator) {
25514
0
        p->level--;
25515
0
        return NULL;
25516
0
    }
25517
358
    void * _res = NULL;
25518
358
    int _mark = p->mark;
25519
358
    { // 'while' named_expression NEWLINE
25520
358
        if (p->error_indicator) {
25521
0
            p->level--;
25522
0
            return NULL;
25523
0
        }
25524
358
        D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE"));
25525
358
        Token * _keyword;
25526
358
        expr_ty named_expression_var;
25527
358
        Token * newline_var;
25528
358
        if (
25529
358
            (_keyword = _PyPegen_expect_token(p, 694))  // token='while'
25530
358
            &&
25531
358
            (named_expression_var = named_expression_rule(p))  // named_expression
25532
358
            &&
25533
358
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25534
358
        )
25535
3
        {
25536
3
            D(fprintf(stderr, "%*c+ invalid_while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE"));
25537
3
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
25538
3
            if (_res == NULL && PyErr_Occurred()) {
25539
3
                p->error_indicator = 1;
25540
3
                p->level--;
25541
3
                return NULL;
25542
3
            }
25543
0
            goto done;
25544
3
        }
25545
355
        p->mark = _mark;
25546
355
        D(fprintf(stderr, "%*c%s invalid_while_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25547
355
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression NEWLINE"));
25548
355
    }
25549
0
    { // 'while' named_expression ':' NEWLINE !INDENT
25550
355
        if (p->error_indicator) {
25551
1
            p->level--;
25552
1
            return NULL;
25553
1
        }
25554
354
        D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT"));
25555
354
        Token * _literal;
25556
354
        Token * a;
25557
354
        expr_ty named_expression_var;
25558
354
        Token * newline_var;
25559
354
        if (
25560
354
            (a = _PyPegen_expect_token(p, 694))  // token='while'
25561
354
            &&
25562
354
            (named_expression_var = named_expression_rule(p))  // named_expression
25563
354
            &&
25564
354
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
25565
354
            &&
25566
354
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25567
354
            &&
25568
354
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
25569
354
        )
25570
3
        {
25571
3
            D(fprintf(stderr, "%*c+ invalid_while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT"));
25572
3
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'while' statement on line %d" , a -> lineno );
25573
3
            if (_res == NULL && PyErr_Occurred()) {
25574
3
                p->error_indicator = 1;
25575
3
                p->level--;
25576
3
                return NULL;
25577
3
            }
25578
0
            goto done;
25579
3
        }
25580
351
        p->mark = _mark;
25581
351
        D(fprintf(stderr, "%*c%s invalid_while_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25582
351
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT"));
25583
351
    }
25584
0
    _res = NULL;
25585
351
  done:
25586
351
    p->level--;
25587
351
    return _res;
25588
351
}
25589
25590
// invalid_for_stmt:
25591
//     | 'async'? 'for' star_targets 'in' star_expressions NEWLINE
25592
//     | 'async'? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT
25593
static void *
25594
invalid_for_stmt_rule(Parser *p)
25595
431
{
25596
431
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25597
0
        _Pypegen_stack_overflow(p);
25598
0
    }
25599
431
    if (p->error_indicator) {
25600
0
        p->level--;
25601
0
        return NULL;
25602
0
    }
25603
431
    void * _res = NULL;
25604
431
    int _mark = p->mark;
25605
431
    { // 'async'? 'for' star_targets 'in' star_expressions NEWLINE
25606
431
        if (p->error_indicator) {
25607
0
            p->level--;
25608
0
            return NULL;
25609
0
        }
25610
431
        D(fprintf(stderr, "%*c> invalid_for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions NEWLINE"));
25611
431
        Token * _keyword;
25612
431
        Token * _keyword_1;
25613
431
        void *_opt_var;
25614
431
        UNUSED(_opt_var); // Silence compiler warnings
25615
431
        Token * newline_var;
25616
431
        expr_ty star_expressions_var;
25617
431
        expr_ty star_targets_var;
25618
431
        if (
25619
431
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
25620
431
            &&
25621
431
            (_keyword = _PyPegen_expect_token(p, 699))  // token='for'
25622
431
            &&
25623
431
            (star_targets_var = star_targets_rule(p))  // star_targets
25624
431
            &&
25625
431
            (_keyword_1 = _PyPegen_expect_token(p, 700))  // token='in'
25626
431
            &&
25627
431
            (star_expressions_var = star_expressions_rule(p))  // star_expressions
25628
431
            &&
25629
431
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25630
431
        )
25631
3
        {
25632
3
            D(fprintf(stderr, "%*c+ invalid_for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions NEWLINE"));
25633
3
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
25634
3
            if (_res == NULL && PyErr_Occurred()) {
25635
3
                p->error_indicator = 1;
25636
3
                p->level--;
25637
3
                return NULL;
25638
3
            }
25639
0
            goto done;
25640
3
        }
25641
428
        p->mark = _mark;
25642
428
        D(fprintf(stderr, "%*c%s invalid_for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25643
428
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions NEWLINE"));
25644
428
    }
25645
0
    { // 'async'? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT
25646
428
        if (p->error_indicator) {
25647
5
            p->level--;
25648
5
            return NULL;
25649
5
        }
25650
423
        D(fprintf(stderr, "%*c> invalid_for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT"));
25651
423
        Token * _keyword;
25652
423
        Token * _literal;
25653
423
        void *_opt_var;
25654
423
        UNUSED(_opt_var); // Silence compiler warnings
25655
423
        Token * a;
25656
423
        Token * newline_var;
25657
423
        expr_ty star_expressions_var;
25658
423
        expr_ty star_targets_var;
25659
423
        if (
25660
423
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
25661
423
            &&
25662
423
            (a = _PyPegen_expect_token(p, 699))  // token='for'
25663
423
            &&
25664
423
            (star_targets_var = star_targets_rule(p))  // star_targets
25665
423
            &&
25666
423
            (_keyword = _PyPegen_expect_token(p, 700))  // token='in'
25667
423
            &&
25668
423
            (star_expressions_var = star_expressions_rule(p))  // star_expressions
25669
423
            &&
25670
423
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
25671
423
            &&
25672
423
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25673
423
            &&
25674
423
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
25675
423
        )
25676
2
        {
25677
2
            D(fprintf(stderr, "%*c+ invalid_for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT"));
25678
2
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'for' statement on line %d" , a -> lineno );
25679
2
            if (_res == NULL && PyErr_Occurred()) {
25680
2
                p->error_indicator = 1;
25681
2
                p->level--;
25682
2
                return NULL;
25683
2
            }
25684
0
            goto done;
25685
2
        }
25686
421
        p->mark = _mark;
25687
421
        D(fprintf(stderr, "%*c%s invalid_for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25688
421
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT"));
25689
421
    }
25690
0
    _res = NULL;
25691
421
  done:
25692
421
    p->level--;
25693
421
    return _res;
25694
421
}
25695
25696
// invalid_def_raw:
25697
//     | 'async'? 'def' NAME type_params? '(' params? ')' ['->' expression] ':' NEWLINE !INDENT
25698
//     | 'async'? 'def' NAME type_params? &&'(' params? ')' ['->' expression] &&':' func_type_comment? block
25699
static void *
25700
invalid_def_raw_rule(Parser *p)
25701
3.29k
{
25702
3.29k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25703
0
        _Pypegen_stack_overflow(p);
25704
0
    }
25705
3.29k
    if (p->error_indicator) {
25706
0
        p->level--;
25707
0
        return NULL;
25708
0
    }
25709
3.29k
    void * _res = NULL;
25710
3.29k
    int _mark = p->mark;
25711
3.29k
    { // 'async'? 'def' NAME type_params? '(' params? ')' ['->' expression] ':' NEWLINE !INDENT
25712
3.29k
        if (p->error_indicator) {
25713
0
            p->level--;
25714
0
            return NULL;
25715
0
        }
25716
3.29k
        D(fprintf(stderr, "%*c> invalid_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'def' NAME type_params? '(' params? ')' ['->' expression] ':' NEWLINE !INDENT"));
25717
3.29k
        Token * _literal;
25718
3.29k
        Token * _literal_1;
25719
3.29k
        Token * _literal_2;
25720
3.29k
        void *_opt_var;
25721
3.29k
        UNUSED(_opt_var); // Silence compiler warnings
25722
3.29k
        void *_opt_var_1;
25723
3.29k
        UNUSED(_opt_var_1); // Silence compiler warnings
25724
3.29k
        void *_opt_var_2;
25725
3.29k
        UNUSED(_opt_var_2); // Silence compiler warnings
25726
3.29k
        void *_opt_var_3;
25727
3.29k
        UNUSED(_opt_var_3); // Silence compiler warnings
25728
3.29k
        Token * a;
25729
3.29k
        expr_ty name_var;
25730
3.29k
        Token * newline_var;
25731
3.29k
        if (
25732
3.29k
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
25733
3.29k
            &&
25734
3.29k
            (a = _PyPegen_expect_token(p, 704))  // token='def'
25735
3.29k
            &&
25736
3.29k
            (name_var = _PyPegen_name_token(p))  // NAME
25737
3.29k
            &&
25738
3.29k
            (_opt_var_1 = type_params_rule(p), !p->error_indicator)  // type_params?
25739
3.29k
            &&
25740
3.29k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
25741
3.29k
            &&
25742
3.29k
            (_opt_var_2 = params_rule(p), !p->error_indicator)  // params?
25743
3.29k
            &&
25744
3.29k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
25745
3.29k
            &&
25746
3.29k
            (_opt_var_3 = _tmp_26_rule(p), !p->error_indicator)  // ['->' expression]
25747
3.29k
            &&
25748
3.29k
            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
25749
3.29k
            &&
25750
3.29k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25751
3.29k
            &&
25752
3.29k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
25753
3.29k
        )
25754
20
        {
25755
20
            D(fprintf(stderr, "%*c+ invalid_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'def' NAME type_params? '(' params? ')' ['->' expression] ':' NEWLINE !INDENT"));
25756
20
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after function definition on line %d" , a -> lineno );
25757
20
            if (_res == NULL && PyErr_Occurred()) {
25758
20
                p->error_indicator = 1;
25759
20
                p->level--;
25760
20
                return NULL;
25761
20
            }
25762
0
            goto done;
25763
20
        }
25764
3.27k
        p->mark = _mark;
25765
3.27k
        D(fprintf(stderr, "%*c%s invalid_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
25766
3.27k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'def' NAME type_params? '(' params? ')' ['->' expression] ':' NEWLINE !INDENT"));
25767
3.27k
    }
25768
0
    { // 'async'? 'def' NAME type_params? &&'(' params? ')' ['->' expression] &&':' func_type_comment? block
25769
3.27k
        if (p->error_indicator) {
25770
51
            p->level--;
25771
51
            return NULL;
25772
51
        }
25773
3.21k
        D(fprintf(stderr, "%*c> invalid_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'def' NAME type_params? &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
25774
3.21k
        Token * _keyword;
25775
3.21k
        Token * _literal;
25776
3.21k
        Token * _literal_1;
25777
3.21k
        Token * _literal_2;
25778
3.21k
        void *_opt_var;
25779
3.21k
        UNUSED(_opt_var); // Silence compiler warnings
25780
3.21k
        void *_opt_var_1;
25781
3.21k
        UNUSED(_opt_var_1); // Silence compiler warnings
25782
3.21k
        void *_opt_var_2;
25783
3.21k
        UNUSED(_opt_var_2); // Silence compiler warnings
25784
3.21k
        void *_opt_var_3;
25785
3.21k
        UNUSED(_opt_var_3); // Silence compiler warnings
25786
3.21k
        void *_opt_var_4;
25787
3.21k
        UNUSED(_opt_var_4); // Silence compiler warnings
25788
3.21k
        asdl_stmt_seq* block_var;
25789
3.21k
        expr_ty name_var;
25790
3.21k
        if (
25791
3.21k
            (_opt_var = _PyPegen_expect_token(p, 703), !p->error_indicator)  // 'async'?
25792
3.21k
            &&
25793
3.21k
            (_keyword = _PyPegen_expect_token(p, 704))  // token='def'
25794
3.21k
            &&
25795
3.21k
            (name_var = _PyPegen_name_token(p))  // NAME
25796
3.21k
            &&
25797
3.21k
            (_opt_var_1 = type_params_rule(p), !p->error_indicator)  // type_params?
25798
3.21k
            &&
25799
3.21k
            (_literal = _PyPegen_expect_forced_token(p, 7, "("))  // forced_token='('
25800
3.21k
            &&
25801
3.21k
            (_opt_var_2 = params_rule(p), !p->error_indicator)  // params?
25802
3.21k
            &&
25803
3.21k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
25804
3.21k
            &&
25805
3.21k
            (_opt_var_3 = _tmp_26_rule(p), !p->error_indicator)  // ['->' expression]
25806
3.21k
            &&
25807
3.21k
            (_literal_2 = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
25808
3.21k
            &&
25809
3.21k
            (_opt_var_4 = func_type_comment_rule(p), !p->error_indicator)  // func_type_comment?
25810
3.21k
            &&
25811
3.21k
            (block_var = block_rule(p))  // block
25812
3.21k
        )
25813
1.78k
        {
25814
1.78k
            D(fprintf(stderr, "%*c+ invalid_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'def' NAME type_params? &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
25815
1.78k
            _res = _PyPegen_dummy_name(p, _opt_var, _keyword, name_var, _opt_var_1, _literal, _opt_var_2, _literal_1, _opt_var_3, _literal_2, _opt_var_4, block_var);
25816
1.78k
            goto done;
25817
1.78k
        }
25818
1.43k
        p->mark = _mark;
25819
1.43k
        D(fprintf(stderr, "%*c%s invalid_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
25820
1.43k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'def' NAME type_params? &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
25821
1.43k
    }
25822
0
    _res = NULL;
25823
3.21k
  done:
25824
3.21k
    p->level--;
25825
3.21k
    return _res;
25826
1.43k
}
25827
25828
// invalid_class_def_raw:
25829
//     | 'class' NAME type_params? ['(' arguments? ')'] NEWLINE
25830
//     | 'class' NAME type_params? ['(' arguments? ')'] ':' NEWLINE !INDENT
25831
static void *
25832
invalid_class_def_raw_rule(Parser *p)
25833
1.08k
{
25834
1.08k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25835
0
        _Pypegen_stack_overflow(p);
25836
0
    }
25837
1.08k
    if (p->error_indicator) {
25838
0
        p->level--;
25839
0
        return NULL;
25840
0
    }
25841
1.08k
    void * _res = NULL;
25842
1.08k
    int _mark = p->mark;
25843
1.08k
    { // 'class' NAME type_params? ['(' arguments? ')'] NEWLINE
25844
1.08k
        if (p->error_indicator) {
25845
0
            p->level--;
25846
0
            return NULL;
25847
0
        }
25848
1.08k
        D(fprintf(stderr, "%*c> invalid_class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] NEWLINE"));
25849
1.08k
        Token * _keyword;
25850
1.08k
        void *_opt_var;
25851
1.08k
        UNUSED(_opt_var); // Silence compiler warnings
25852
1.08k
        void *_opt_var_1;
25853
1.08k
        UNUSED(_opt_var_1); // Silence compiler warnings
25854
1.08k
        expr_ty name_var;
25855
1.08k
        Token * newline_var;
25856
1.08k
        if (
25857
1.08k
            (_keyword = _PyPegen_expect_token(p, 706))  // token='class'
25858
1.08k
            &&
25859
1.08k
            (name_var = _PyPegen_name_token(p))  // NAME
25860
1.08k
            &&
25861
1.08k
            (_opt_var = type_params_rule(p), !p->error_indicator)  // type_params?
25862
1.08k
            &&
25863
1.08k
            (_opt_var_1 = _tmp_25_rule(p), !p->error_indicator)  // ['(' arguments? ')']
25864
1.08k
            &&
25865
1.08k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25866
1.08k
        )
25867
9
        {
25868
9
            D(fprintf(stderr, "%*c+ invalid_class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] NEWLINE"));
25869
9
            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
25870
9
            if (_res == NULL && PyErr_Occurred()) {
25871
9
                p->error_indicator = 1;
25872
9
                p->level--;
25873
9
                return NULL;
25874
9
            }
25875
0
            goto done;
25876
9
        }
25877
1.08k
        p->mark = _mark;
25878
1.08k
        D(fprintf(stderr, "%*c%s invalid_class_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
25879
1.08k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] NEWLINE"));
25880
1.08k
    }
25881
0
    { // 'class' NAME type_params? ['(' arguments? ')'] ':' NEWLINE !INDENT
25882
1.08k
        if (p->error_indicator) {
25883
5
            p->level--;
25884
5
            return NULL;
25885
5
        }
25886
1.07k
        D(fprintf(stderr, "%*c> invalid_class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' NEWLINE !INDENT"));
25887
1.07k
        Token * _literal;
25888
1.07k
        void *_opt_var;
25889
1.07k
        UNUSED(_opt_var); // Silence compiler warnings
25890
1.07k
        void *_opt_var_1;
25891
1.07k
        UNUSED(_opt_var_1); // Silence compiler warnings
25892
1.07k
        Token * a;
25893
1.07k
        expr_ty name_var;
25894
1.07k
        Token * newline_var;
25895
1.07k
        if (
25896
1.07k
            (a = _PyPegen_expect_token(p, 706))  // token='class'
25897
1.07k
            &&
25898
1.07k
            (name_var = _PyPegen_name_token(p))  // NAME
25899
1.07k
            &&
25900
1.07k
            (_opt_var = type_params_rule(p), !p->error_indicator)  // type_params?
25901
1.07k
            &&
25902
1.07k
            (_opt_var_1 = _tmp_25_rule(p), !p->error_indicator)  // ['(' arguments? ')']
25903
1.07k
            &&
25904
1.07k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
25905
1.07k
            &&
25906
1.07k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
25907
1.07k
            &&
25908
1.07k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
25909
1.07k
        )
25910
5
        {
25911
5
            D(fprintf(stderr, "%*c+ invalid_class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' NEWLINE !INDENT"));
25912
5
            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after class definition on line %d" , a -> lineno );
25913
5
            if (_res == NULL && PyErr_Occurred()) {
25914
5
                p->error_indicator = 1;
25915
5
                p->level--;
25916
5
                return NULL;
25917
5
            }
25918
0
            goto done;
25919
5
        }
25920
1.07k
        p->mark = _mark;
25921
1.07k
        D(fprintf(stderr, "%*c%s invalid_class_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
25922
1.07k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' NEWLINE !INDENT"));
25923
1.07k
    }
25924
0
    _res = NULL;
25925
1.07k
  done:
25926
1.07k
    p->level--;
25927
1.07k
    return _res;
25928
1.07k
}
25929
25930
// invalid_double_starred_kvpairs:
25931
//     | ','.double_starred_kvpair+ ',' invalid_kvpair
25932
//     | expression ':' '*' bitwise_or
25933
//     | expression ':' &('}' | ',')
25934
static void *
25935
invalid_double_starred_kvpairs_rule(Parser *p)
25936
11.4k
{
25937
11.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
25938
0
        _Pypegen_stack_overflow(p);
25939
0
    }
25940
11.4k
    if (p->error_indicator) {
25941
0
        p->level--;
25942
0
        return NULL;
25943
0
    }
25944
11.4k
    void * _res = NULL;
25945
11.4k
    int _mark = p->mark;
25946
11.4k
    { // ','.double_starred_kvpair+ ',' invalid_kvpair
25947
11.4k
        if (p->error_indicator) {
25948
0
            p->level--;
25949
0
            return NULL;
25950
0
        }
25951
11.4k
        D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair"));
25952
11.4k
        asdl_seq * _gather_83_var;
25953
11.4k
        Token * _literal;
25954
11.4k
        void *invalid_kvpair_var;
25955
11.4k
        if (
25956
11.4k
            (_gather_83_var = _gather_83_rule(p))  // ','.double_starred_kvpair+
25957
11.4k
            &&
25958
11.4k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
25959
11.4k
            &&
25960
11.4k
            (invalid_kvpair_var = invalid_kvpair_rule(p))  // invalid_kvpair
25961
11.4k
        )
25962
0
        {
25963
0
            D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair"));
25964
0
            _res = _PyPegen_dummy_name(p, _gather_83_var, _literal, invalid_kvpair_var);
25965
0
            goto done;
25966
0
        }
25967
11.4k
        p->mark = _mark;
25968
11.4k
        D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ',
25969
11.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair"));
25970
11.4k
    }
25971
0
    { // expression ':' '*' bitwise_or
25972
11.4k
        if (p->error_indicator) {
25973
42
            p->level--;
25974
42
            return NULL;
25975
42
        }
25976
11.4k
        D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
25977
11.4k
        Token * _literal;
25978
11.4k
        Token * a;
25979
11.4k
        expr_ty bitwise_or_var;
25980
11.4k
        expr_ty expression_var;
25981
11.4k
        if (
25982
11.4k
            (expression_var = expression_rule(p))  // expression
25983
11.4k
            &&
25984
11.4k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
25985
11.4k
            &&
25986
11.4k
            (a = _PyPegen_expect_token(p, 16))  // token='*'
25987
11.4k
            &&
25988
11.4k
            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
25989
11.4k
        )
25990
1
        {
25991
1
            D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
25992
1
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "cannot use a starred expression in a dictionary value" );
25993
1
            if (_res == NULL && PyErr_Occurred()) {
25994
1
                p->error_indicator = 1;
25995
1
                p->level--;
25996
1
                return NULL;
25997
1
            }
25998
0
            goto done;
25999
1
        }
26000
11.4k
        p->mark = _mark;
26001
11.4k
        D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ',
26002
11.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '*' bitwise_or"));
26003
11.4k
    }
26004
0
    { // expression ':' &('}' | ',')
26005
11.4k
        if (p->error_indicator) {
26006
197
            p->level--;
26007
197
            return NULL;
26008
197
        }
26009
11.2k
        D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')"));
26010
11.2k
        Token * a;
26011
11.2k
        expr_ty expression_var;
26012
11.2k
        if (
26013
11.2k
            (expression_var = expression_rule(p))  // expression
26014
11.2k
            &&
26015
11.2k
            (a = _PyPegen_expect_token(p, 11))  // token=':'
26016
11.2k
            &&
26017
11.2k
            _PyPegen_lookahead(1, _tmp_147_rule, p)
26018
11.2k
        )
26019
7
        {
26020
7
            D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')"));
26021
7
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" );
26022
7
            if (_res == NULL && PyErr_Occurred()) {
26023
7
                p->error_indicator = 1;
26024
7
                p->level--;
26025
7
                return NULL;
26026
7
            }
26027
0
            goto done;
26028
7
        }
26029
11.1k
        p->mark = _mark;
26030
11.1k
        D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ',
26031
11.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' &('}' | ',')"));
26032
11.1k
    }
26033
0
    _res = NULL;
26034
11.1k
  done:
26035
11.1k
    p->level--;
26036
11.1k
    return _res;
26037
11.1k
}
26038
26039
// invalid_kvpair:
26040
//     | expression !(':')
26041
//     | expression ':' '*' bitwise_or
26042
//     | expression ':' &('}' | ',')
26043
static void *
26044
invalid_kvpair_rule(Parser *p)
26045
844
{
26046
844
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
26047
0
        _Pypegen_stack_overflow(p);
26048
0
    }
26049
844
    if (p->error_indicator) {
26050
0
        p->level--;
26051
0
        return NULL;
26052
0
    }
26053
844
    void * _res = NULL;
26054
844
    int _mark = p->mark;
26055
844
    { // expression !(':')
26056
844
        if (p->error_indicator) {
26057
0
            p->level--;
26058
0
            return NULL;
26059
0
        }
26060
844
        D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !(':')"));
26061
844
        expr_ty a;
26062
844
        if (
26063
844
            (a = expression_rule(p))  // expression
26064
844
            &&
26065
844
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 11)  // token=(':')
26066
844
        )
26067
4
        {
26068
4
            D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !(':')"));
26069
4
            _res = RAISE_ERROR_KNOWN_LOCATION ( p , PyExc_SyntaxError , a -> lineno , a -> end_col_offset - 1 , a -> end_lineno , - 1 , "':' expected after dictionary key" );
26070
4
            if (_res == NULL && PyErr_Occurred()) {
26071
4
                p->error_indicator = 1;
26072
4
                p->level--;
26073
4
                return NULL;
26074
4
            }
26075
0
            goto done;
26076
4
        }
26077
840
        p->mark = _mark;
26078
840
        D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
26079
840
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !(':')"));
26080
840
    }
26081
0
    { // expression ':' '*' bitwise_or
26082
840
        if (p->error_indicator) {
26083
0
            p->level--;
26084
0
            return NULL;
26085
0
        }
26086
840
        D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
26087
840
        Token * _literal;
26088
840
        Token * a;
26089
840
        expr_ty bitwise_or_var;
26090
840
        expr_ty expression_var;
26091
840
        if (
26092
840
            (expression_var = expression_rule(p))  // expression
26093
840
            &&
26094
840
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
26095
840
            &&
26096
840
            (a = _PyPegen_expect_token(p, 16))  // token='*'
26097
840
            &&
26098
840
            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
26099
840
        )
26100
2
        {
26101
2
            D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
26102
2
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "cannot use a starred expression in a dictionary value" );
26103
2
            if (_res == NULL && PyErr_Occurred()) {
26104
2
                p->error_indicator = 1;
26105
2
                p->level--;
26106
2
                return NULL;
26107
2
            }
26108
0
            goto done;
26109
2
        }
26110
838
        p->mark = _mark;
26111
838
        D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
26112
838
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '*' bitwise_or"));
26113
838
    }
26114
0
    { // expression ':' &('}' | ',')
26115
838
        if (p->error_indicator) {
26116
35
            p->level--;
26117
35
            return NULL;
26118
35
        }
26119
803
        D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')"));
26120
803
        Token * a;
26121
803
        expr_ty expression_var;
26122
803
        if (
26123
803
            (expression_var = expression_rule(p))  // expression
26124
803
            &&
26125
803
            (a = _PyPegen_expect_token(p, 11))  // token=':'
26126
803
            &&
26127
803
            _PyPegen_lookahead(1, _tmp_147_rule, p)
26128
803
        )
26129
1
        {
26130
1
            D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')"));
26131
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" );
26132
1
            if (_res == NULL && PyErr_Occurred()) {
26133
1
                p->error_indicator = 1;
26134
1
                p->level--;
26135
1
                return NULL;
26136
1
            }
26137
0
            goto done;
26138
1
        }
26139
802
        p->mark = _mark;
26140
802
        D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
26141
802
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' &('}' | ',')"));
26142
802
    }
26143
0
    _res = NULL;
26144
802
  done:
26145
802
    p->level--;
26146
802
    return _res;
26147
802
}
26148
26149
// invalid_starred_expression_unpacking: '*' expression '=' expression
26150
static void *
26151
invalid_starred_expression_unpacking_rule(Parser *p)
26152
170k
{
26153
170k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
26154
1
        _Pypegen_stack_overflow(p);
26155
1
    }
26156
170k
    if (p->error_indicator) {
26157
1
        p->level--;
26158
1
        return NULL;
26159
1
    }
26160
170k
    void * _res = NULL;
26161
170k
    int _mark = p->mark;
26162
170k
    { // '*' expression '=' expression
26163
170k
        if (p->error_indicator) {
26164
0
            p->level--;
26165
0
            return NULL;
26166
0
        }
26167
170k
        D(fprintf(stderr, "%*c> invalid_starred_expression_unpacking[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression '=' expression"));
26168
170k
        Token * _literal;
26169
170k
        Token * a;
26170
170k
        expr_ty b;
26171
170k
        expr_ty expression_var;
26172
170k
        if (
26173
170k
            (a = _PyPegen_expect_token(p, 16))  // token='*'
26174
170k
            &&
26175
170k
            (expression_var = expression_rule(p))  // expression
26176
170k
            &&
26177
170k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
26178
170k
            &&
26179
170k
            (b = expression_rule(p))  // expression
26180
170k
        )
26181
2
        {
26182
2
            D(fprintf(stderr, "%*c+ invalid_starred_expression_unpacking[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression '=' expression"));
26183
2
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to iterable argument unpacking" );
26184
2
            if (_res == NULL && PyErr_Occurred()) {
26185
2
                p->error_indicator = 1;
26186
2
                p->level--;
26187
2
                return NULL;
26188
2
            }
26189
0
            goto done;
26190
2
        }
26191
170k
        p->mark = _mark;
26192
170k
        D(fprintf(stderr, "%*c%s invalid_starred_expression_unpacking[%d-%d]: %s failed!\n", p->level, ' ',
26193
170k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression '=' expression"));
26194
170k
    }
26195
0
    _res = NULL;
26196
170k
  done:
26197
170k
    p->level--;
26198
170k
    return _res;
26199
170k
}
26200
26201
// invalid_starred_expression: '*'
26202
static void *
26203
invalid_starred_expression_rule(Parser *p)
26204
157k
{
26205
157k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
26206
0
        _Pypegen_stack_overflow(p);
26207
0
    }
26208
157k
    if (p->error_indicator) {
26209
0
        p->level--;
26210
0
        return NULL;
26211
0
    }
26212
157k
    void * _res = NULL;
26213
157k
    int _mark = p->mark;
26214
157k
    { // '*'
26215
157k
        if (p->error_indicator) {
26216
0
            p->level--;
26217
0
            return NULL;
26218
0
        }
26219
157k
        D(fprintf(stderr, "%*c> invalid_starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
26220
157k
        Token * _literal;
26221
157k
        if (
26222
157k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
26223
157k
        )
26224
54
        {
26225
54
            D(fprintf(stderr, "%*c+ invalid_starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
26226
54
            _res = RAISE_SYNTAX_ERROR ( "Invalid star expression" );
26227
54
            if (_res == NULL && PyErr_Occurred()) {
26228
54
                p->error_indicator = 1;
26229
54
                p->level--;
26230
54
                return NULL;
26231
54
            }
26232
0
            goto done;
26233
54
        }
26234
157k
        p->mark = _mark;
26235
157k
        D(fprintf(stderr, "%*c%s invalid_starred_expression[%d-%d]: %s failed!\n", p->level, ' ',
26236
157k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'"));
26237
157k
    }
26238
0
    _res = NULL;
26239
157k
  done:
26240
157k
    p->level--;
26241
157k
    return _res;
26242
157k
}
26243
26244
// invalid_fstring_replacement_field:
26245
//     | '{' '='
26246
//     | '{' '!'
26247
//     | '{' ':'
26248
//     | '{' '}'
26249
//     | '{' !annotated_rhs
26250
//     | '{' annotated_rhs !('=' | '!' | ':' | '}')
26251
//     | '{' annotated_rhs '=' !('!' | ':' | '}')
26252
//     | '{' annotated_rhs '='? invalid_fstring_conversion_character
26253
//     | '{' annotated_rhs '='? ['!' NAME] !(':' | '}')
26254
//     | '{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'
26255
//     | '{' annotated_rhs '='? ['!' NAME] !'}'
26256
static void *
26257
invalid_fstring_replacement_field_rule(Parser *p)
26258
6.89k
{
26259
6.89k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
26260
1
        _Pypegen_stack_overflow(p);
26261
1
    }
26262
6.89k
    if (p->error_indicator) {
26263
1
        p->level--;
26264
1
        return NULL;
26265
1
    }
26266
6.89k
    void * _res = NULL;
26267
6.89k
    int _mark = p->mark;
26268
6.89k
    { // '{' '='
26269
6.89k
        if (p->error_indicator) {
26270
0
            p->level--;
26271
0
            return NULL;
26272
0
        }
26273
6.89k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '='"));
26274
6.89k
        Token * _literal;
26275
6.89k
        Token * a;
26276
6.89k
        if (
26277
6.89k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26278
6.89k
            &&
26279
6.89k
            (a = _PyPegen_expect_token(p, 22))  // token='='
26280
6.89k
        )
26281
19
        {
26282
19
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '='"));
26283
19
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "f-string: valid expression required before '='" );
26284
19
            if (_res == NULL && PyErr_Occurred()) {
26285
19
                p->error_indicator = 1;
26286
19
                p->level--;
26287
19
                return NULL;
26288
19
            }
26289
0
            goto done;
26290
19
        }
26291
6.87k
        p->mark = _mark;
26292
6.87k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26293
6.87k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '='"));
26294
6.87k
    }
26295
0
    { // '{' '!'
26296
6.87k
        if (p->error_indicator) {
26297
0
            p->level--;
26298
0
            return NULL;
26299
0
        }
26300
6.87k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '!'"));
26301
6.87k
        Token * _literal;
26302
6.87k
        Token * a;
26303
6.87k
        if (
26304
6.87k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26305
6.87k
            &&
26306
6.87k
            (a = _PyPegen_expect_token(p, 54))  // token='!'
26307
6.87k
        )
26308
10
        {
26309
10
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '!'"));
26310
10
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "f-string: valid expression required before '!'" );
26311
10
            if (_res == NULL && PyErr_Occurred()) {
26312
10
                p->error_indicator = 1;
26313
10
                p->level--;
26314
10
                return NULL;
26315
10
            }
26316
0
            goto done;
26317
10
        }
26318
6.86k
        p->mark = _mark;
26319
6.86k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26320
6.86k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '!'"));
26321
6.86k
    }
26322
0
    { // '{' ':'
26323
6.86k
        if (p->error_indicator) {
26324
0
            p->level--;
26325
0
            return NULL;
26326
0
        }
26327
6.86k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' ':'"));
26328
6.86k
        Token * _literal;
26329
6.86k
        Token * a;
26330
6.86k
        if (
26331
6.86k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26332
6.86k
            &&
26333
6.86k
            (a = _PyPegen_expect_token(p, 11))  // token=':'
26334
6.86k
        )
26335
79
        {
26336
79
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' ':'"));
26337
79
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "f-string: valid expression required before ':'" );
26338
79
            if (_res == NULL && PyErr_Occurred()) {
26339
79
                p->error_indicator = 1;
26340
79
                p->level--;
26341
79
                return NULL;
26342
79
            }
26343
0
            goto done;
26344
79
        }
26345
6.78k
        p->mark = _mark;
26346
6.78k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26347
6.78k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' ':'"));
26348
6.78k
    }
26349
0
    { // '{' '}'
26350
6.78k
        if (p->error_indicator) {
26351
0
            p->level--;
26352
0
            return NULL;
26353
0
        }
26354
6.78k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
26355
6.78k
        Token * _literal;
26356
6.78k
        Token * a;
26357
6.78k
        if (
26358
6.78k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26359
6.78k
            &&
26360
6.78k
            (a = _PyPegen_expect_token(p, 26))  // token='}'
26361
6.78k
        )
26362
11
        {
26363
11
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
26364
11
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "f-string: valid expression required before '}'" );
26365
11
            if (_res == NULL && PyErr_Occurred()) {
26366
11
                p->error_indicator = 1;
26367
11
                p->level--;
26368
11
                return NULL;
26369
11
            }
26370
0
            goto done;
26371
11
        }
26372
6.77k
        p->mark = _mark;
26373
6.77k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26374
6.77k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '}'"));
26375
6.77k
    }
26376
0
    { // '{' !annotated_rhs
26377
6.77k
        if (p->error_indicator) {
26378
0
            p->level--;
26379
0
            return NULL;
26380
0
        }
26381
6.77k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' !annotated_rhs"));
26382
6.77k
        Token * _literal;
26383
6.77k
        if (
26384
6.77k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26385
6.77k
            &&
26386
6.77k
            _PyPegen_lookahead_for_expr(0, annotated_rhs_rule, p)
26387
6.77k
        )
26388
37
        {
26389
37
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' !annotated_rhs"));
26390
37
            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting a valid expression after '{'" );
26391
37
            if (_res == NULL && PyErr_Occurred()) {
26392
37
                p->error_indicator = 1;
26393
37
                p->level--;
26394
37
                return NULL;
26395
37
            }
26396
0
            goto done;
26397
37
        }
26398
6.74k
        p->mark = _mark;
26399
6.74k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26400
6.74k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' !annotated_rhs"));
26401
6.74k
    }
26402
0
    { // '{' annotated_rhs !('=' | '!' | ':' | '}')
26403
6.74k
        if (p->error_indicator) {
26404
0
            p->level--;
26405
0
            return NULL;
26406
0
        }
26407
6.74k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26408
6.74k
        Token * _literal;
26409
6.74k
        expr_ty annotated_rhs_var;
26410
6.74k
        if (
26411
6.74k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26412
6.74k
            &&
26413
6.74k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26414
6.74k
            &&
26415
6.74k
            _PyPegen_lookahead(0, _tmp_148_rule, p)
26416
6.74k
        )
26417
29
        {
26418
29
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26419
29
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting '=', or '!', or ':', or '}'" );
26420
29
            if (_res == NULL && PyErr_Occurred()) {
26421
29
                p->error_indicator = 1;
26422
29
                p->level--;
26423
29
                return NULL;
26424
29
            }
26425
0
            goto done;
26426
29
        }
26427
6.71k
        p->mark = _mark;
26428
6.71k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26429
6.71k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26430
6.71k
    }
26431
0
    { // '{' annotated_rhs '=' !('!' | ':' | '}')
26432
6.71k
        if (p->error_indicator) {
26433
0
            p->level--;
26434
0
            return NULL;
26435
0
        }
26436
6.71k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26437
6.71k
        Token * _literal;
26438
6.71k
        Token * _literal_1;
26439
6.71k
        expr_ty annotated_rhs_var;
26440
6.71k
        if (
26441
6.71k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26442
6.71k
            &&
26443
6.71k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26444
6.71k
            &&
26445
6.71k
            (_literal_1 = _PyPegen_expect_token(p, 22))  // token='='
26446
6.71k
            &&
26447
6.71k
            _PyPegen_lookahead(0, _tmp_149_rule, p)
26448
6.71k
        )
26449
7
        {
26450
7
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26451
7
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting '!', or ':', or '}'" );
26452
7
            if (_res == NULL && PyErr_Occurred()) {
26453
7
                p->error_indicator = 1;
26454
7
                p->level--;
26455
7
                return NULL;
26456
7
            }
26457
0
            goto done;
26458
7
        }
26459
6.70k
        p->mark = _mark;
26460
6.70k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26461
6.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26462
6.70k
    }
26463
0
    { // '{' annotated_rhs '='? invalid_fstring_conversion_character
26464
6.70k
        if (p->error_indicator) {
26465
0
            p->level--;
26466
0
            return NULL;
26467
0
        }
26468
6.70k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? invalid_fstring_conversion_character"));
26469
6.70k
        Token * _literal;
26470
6.70k
        void *_opt_var;
26471
6.70k
        UNUSED(_opt_var); // Silence compiler warnings
26472
6.70k
        expr_ty annotated_rhs_var;
26473
6.70k
        void *invalid_fstring_conversion_character_var;
26474
6.70k
        if (
26475
6.70k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26476
6.70k
            &&
26477
6.70k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26478
6.70k
            &&
26479
6.70k
            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
26480
6.70k
            &&
26481
6.70k
            (invalid_fstring_conversion_character_var = invalid_fstring_conversion_character_rule(p))  // invalid_fstring_conversion_character
26482
6.70k
        )
26483
0
        {
26484
0
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? invalid_fstring_conversion_character"));
26485
0
            _res = _PyPegen_dummy_name(p, _literal, annotated_rhs_var, _opt_var, invalid_fstring_conversion_character_var);
26486
0
            goto done;
26487
0
        }
26488
6.70k
        p->mark = _mark;
26489
6.70k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26490
6.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? invalid_fstring_conversion_character"));
26491
6.70k
    }
26492
0
    { // '{' annotated_rhs '='? ['!' NAME] !(':' | '}')
26493
6.70k
        if (p->error_indicator) {
26494
11
            p->level--;
26495
11
            return NULL;
26496
11
        }
26497
6.69k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26498
6.69k
        Token * _literal;
26499
6.69k
        void *_opt_var;
26500
6.69k
        UNUSED(_opt_var); // Silence compiler warnings
26501
6.69k
        void *_opt_var_1;
26502
6.69k
        UNUSED(_opt_var_1); // Silence compiler warnings
26503
6.69k
        expr_ty annotated_rhs_var;
26504
6.69k
        if (
26505
6.69k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26506
6.69k
            &&
26507
6.69k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26508
6.69k
            &&
26509
6.69k
            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
26510
6.69k
            &&
26511
6.69k
            (_opt_var_1 = _tmp_150_rule(p), !p->error_indicator)  // ['!' NAME]
26512
6.69k
            &&
26513
6.69k
            _PyPegen_lookahead(0, _tmp_151_rule, p)
26514
6.69k
        )
26515
4
        {
26516
4
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26517
4
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting ':' or '}'" );
26518
4
            if (_res == NULL && PyErr_Occurred()) {
26519
4
                p->error_indicator = 1;
26520
4
                p->level--;
26521
4
                return NULL;
26522
4
            }
26523
0
            goto done;
26524
4
        }
26525
6.69k
        p->mark = _mark;
26526
6.69k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26527
6.69k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26528
6.69k
    }
26529
0
    { // '{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'
26530
6.69k
        if (p->error_indicator) {
26531
0
            p->level--;
26532
0
            return NULL;
26533
0
        }
26534
6.69k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26535
6.69k
        Token * _literal;
26536
6.69k
        Token * _literal_1;
26537
6.69k
        asdl_seq * _loop0_76_var;
26538
6.69k
        void *_opt_var;
26539
6.69k
        UNUSED(_opt_var); // Silence compiler warnings
26540
6.69k
        void *_opt_var_1;
26541
6.69k
        UNUSED(_opt_var_1); // Silence compiler warnings
26542
6.69k
        expr_ty annotated_rhs_var;
26543
6.69k
        if (
26544
6.69k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26545
6.69k
            &&
26546
6.69k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26547
6.69k
            &&
26548
6.69k
            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
26549
6.69k
            &&
26550
6.69k
            (_opt_var_1 = _tmp_150_rule(p), !p->error_indicator)  // ['!' NAME]
26551
6.69k
            &&
26552
6.69k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
26553
6.69k
            &&
26554
6.69k
            (_loop0_76_var = _loop0_76_rule(p))  // fstring_format_spec*
26555
6.69k
            &&
26556
6.69k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26)  // token='}'
26557
6.69k
        )
26558
150
        {
26559
150
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26560
150
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting '}', or format specs" );
26561
150
            if (_res == NULL && PyErr_Occurred()) {
26562
150
                p->error_indicator = 1;
26563
150
                p->level--;
26564
150
                return NULL;
26565
150
            }
26566
0
            goto done;
26567
150
        }
26568
6.54k
        p->mark = _mark;
26569
6.54k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26570
6.54k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26571
6.54k
    }
26572
0
    { // '{' annotated_rhs '='? ['!' NAME] !'}'
26573
6.54k
        if (p->error_indicator) {
26574
0
            p->level--;
26575
0
            return NULL;
26576
0
        }
26577
6.54k
        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
26578
6.54k
        Token * _literal;
26579
6.54k
        void *_opt_var;
26580
6.54k
        UNUSED(_opt_var); // Silence compiler warnings
26581
6.54k
        void *_opt_var_1;
26582
6.54k
        UNUSED(_opt_var_1); // Silence compiler warnings
26583
6.54k
        expr_ty annotated_rhs_var;
26584
6.54k
        if (
26585
6.54k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26586
6.54k
            &&
26587
6.54k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26588
6.54k
            &&
26589
6.54k
            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
26590
6.54k
            &&
26591
6.54k
            (_opt_var_1 = _tmp_150_rule(p), !p->error_indicator)  // ['!' NAME]
26592
6.54k
            &&
26593
6.54k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26)  // token='}'
26594
6.54k
        )
26595
0
        {
26596
0
            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
26597
0
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting '}'" );
26598
0
            if (_res == NULL && PyErr_Occurred()) {
26599
0
                p->error_indicator = 1;
26600
0
                p->level--;
26601
0
                return NULL;
26602
0
            }
26603
0
            goto done;
26604
0
        }
26605
6.54k
        p->mark = _mark;
26606
6.54k
        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26607
6.54k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
26608
6.54k
    }
26609
0
    _res = NULL;
26610
6.54k
  done:
26611
6.54k
    p->level--;
26612
6.54k
    return _res;
26613
6.54k
}
26614
26615
// invalid_fstring_conversion_character: '!' &(':' | '}') | '!' !NAME
26616
static void *
26617
invalid_fstring_conversion_character_rule(Parser *p)
26618
165
{
26619
165
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
26620
0
        _Pypegen_stack_overflow(p);
26621
0
    }
26622
165
    if (p->error_indicator) {
26623
0
        p->level--;
26624
0
        return NULL;
26625
0
    }
26626
165
    void * _res = NULL;
26627
165
    int _mark = p->mark;
26628
165
    { // '!' &(':' | '}')
26629
165
        if (p->error_indicator) {
26630
0
            p->level--;
26631
0
            return NULL;
26632
0
        }
26633
165
        D(fprintf(stderr, "%*c> invalid_fstring_conversion_character[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')"));
26634
165
        Token * _literal;
26635
165
        if (
26636
165
            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
26637
165
            &&
26638
165
            _PyPegen_lookahead(1, _tmp_151_rule, p)
26639
165
        )
26640
3
        {
26641
3
            D(fprintf(stderr, "%*c+ invalid_fstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')"));
26642
3
            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: missing conversion character" );
26643
3
            if (_res == NULL && PyErr_Occurred()) {
26644
3
                p->error_indicator = 1;
26645
3
                p->level--;
26646
3
                return NULL;
26647
3
            }
26648
0
            goto done;
26649
3
        }
26650
162
        p->mark = _mark;
26651
162
        D(fprintf(stderr, "%*c%s invalid_fstring_conversion_character[%d-%d]: %s failed!\n", p->level, ' ',
26652
162
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' &(':' | '}')"));
26653
162
    }
26654
0
    { // '!' !NAME
26655
162
        if (p->error_indicator) {
26656
0
            p->level--;
26657
0
            return NULL;
26658
0
        }
26659
162
        D(fprintf(stderr, "%*c> invalid_fstring_conversion_character[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' !NAME"));
26660
162
        Token * _literal;
26661
162
        if (
26662
162
            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
26663
162
            &&
26664
162
            _PyPegen_lookahead_for_expr(0, _PyPegen_name_token, p)
26665
162
        )
26666
8
        {
26667
8
            D(fprintf(stderr, "%*c+ invalid_fstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' !NAME"));
26668
8
            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: invalid conversion character" );
26669
8
            if (_res == NULL && PyErr_Occurred()) {
26670
8
                p->error_indicator = 1;
26671
8
                p->level--;
26672
8
                return NULL;
26673
8
            }
26674
0
            goto done;
26675
8
        }
26676
154
        p->mark = _mark;
26677
154
        D(fprintf(stderr, "%*c%s invalid_fstring_conversion_character[%d-%d]: %s failed!\n", p->level, ' ',
26678
154
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' !NAME"));
26679
154
    }
26680
0
    _res = NULL;
26681
154
  done:
26682
154
    p->level--;
26683
154
    return _res;
26684
154
}
26685
26686
// invalid_tstring_replacement_field:
26687
//     | '{' '='
26688
//     | '{' '!'
26689
//     | '{' ':'
26690
//     | '{' '}'
26691
//     | '{' !annotated_rhs
26692
//     | '{' annotated_rhs !('=' | '!' | ':' | '}')
26693
//     | '{' annotated_rhs '=' !('!' | ':' | '}')
26694
//     | '{' annotated_rhs '='? invalid_tstring_conversion_character
26695
//     | '{' annotated_rhs '='? ['!' NAME] !(':' | '}')
26696
//     | '{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'
26697
//     | '{' annotated_rhs '='? ['!' NAME] !'}'
26698
static void *
26699
invalid_tstring_replacement_field_rule(Parser *p)
26700
3.08k
{
26701
3.08k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
26702
1
        _Pypegen_stack_overflow(p);
26703
1
    }
26704
3.08k
    if (p->error_indicator) {
26705
1
        p->level--;
26706
1
        return NULL;
26707
1
    }
26708
3.07k
    void * _res = NULL;
26709
3.07k
    int _mark = p->mark;
26710
3.07k
    { // '{' '='
26711
3.07k
        if (p->error_indicator) {
26712
0
            p->level--;
26713
0
            return NULL;
26714
0
        }
26715
3.07k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '='"));
26716
3.07k
        Token * _literal;
26717
3.07k
        Token * a;
26718
3.07k
        if (
26719
3.07k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26720
3.07k
            &&
26721
3.07k
            (a = _PyPegen_expect_token(p, 22))  // token='='
26722
3.07k
        )
26723
3
        {
26724
3
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '='"));
26725
3
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "t-string: valid expression required before '='" );
26726
3
            if (_res == NULL && PyErr_Occurred()) {
26727
3
                p->error_indicator = 1;
26728
3
                p->level--;
26729
3
                return NULL;
26730
3
            }
26731
0
            goto done;
26732
3
        }
26733
3.07k
        p->mark = _mark;
26734
3.07k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26735
3.07k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '='"));
26736
3.07k
    }
26737
0
    { // '{' '!'
26738
3.07k
        if (p->error_indicator) {
26739
0
            p->level--;
26740
0
            return NULL;
26741
0
        }
26742
3.07k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '!'"));
26743
3.07k
        Token * _literal;
26744
3.07k
        Token * a;
26745
3.07k
        if (
26746
3.07k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26747
3.07k
            &&
26748
3.07k
            (a = _PyPegen_expect_token(p, 54))  // token='!'
26749
3.07k
        )
26750
10
        {
26751
10
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '!'"));
26752
10
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "t-string: valid expression required before '!'" );
26753
10
            if (_res == NULL && PyErr_Occurred()) {
26754
10
                p->error_indicator = 1;
26755
10
                p->level--;
26756
10
                return NULL;
26757
10
            }
26758
0
            goto done;
26759
10
        }
26760
3.06k
        p->mark = _mark;
26761
3.06k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26762
3.06k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '!'"));
26763
3.06k
    }
26764
0
    { // '{' ':'
26765
3.06k
        if (p->error_indicator) {
26766
0
            p->level--;
26767
0
            return NULL;
26768
0
        }
26769
3.06k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' ':'"));
26770
3.06k
        Token * _literal;
26771
3.06k
        Token * a;
26772
3.06k
        if (
26773
3.06k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26774
3.06k
            &&
26775
3.06k
            (a = _PyPegen_expect_token(p, 11))  // token=':'
26776
3.06k
        )
26777
19
        {
26778
19
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' ':'"));
26779
19
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "t-string: valid expression required before ':'" );
26780
19
            if (_res == NULL && PyErr_Occurred()) {
26781
19
                p->error_indicator = 1;
26782
19
                p->level--;
26783
19
                return NULL;
26784
19
            }
26785
0
            goto done;
26786
19
        }
26787
3.04k
        p->mark = _mark;
26788
3.04k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26789
3.04k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' ':'"));
26790
3.04k
    }
26791
0
    { // '{' '}'
26792
3.04k
        if (p->error_indicator) {
26793
0
            p->level--;
26794
0
            return NULL;
26795
0
        }
26796
3.04k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
26797
3.04k
        Token * _literal;
26798
3.04k
        Token * a;
26799
3.04k
        if (
26800
3.04k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26801
3.04k
            &&
26802
3.04k
            (a = _PyPegen_expect_token(p, 26))  // token='}'
26803
3.04k
        )
26804
7
        {
26805
7
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
26806
7
            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "t-string: valid expression required before '}'" );
26807
7
            if (_res == NULL && PyErr_Occurred()) {
26808
7
                p->error_indicator = 1;
26809
7
                p->level--;
26810
7
                return NULL;
26811
7
            }
26812
0
            goto done;
26813
7
        }
26814
3.04k
        p->mark = _mark;
26815
3.04k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26816
3.04k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '}'"));
26817
3.04k
    }
26818
0
    { // '{' !annotated_rhs
26819
3.04k
        if (p->error_indicator) {
26820
0
            p->level--;
26821
0
            return NULL;
26822
0
        }
26823
3.04k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' !annotated_rhs"));
26824
3.04k
        Token * _literal;
26825
3.04k
        if (
26826
3.04k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26827
3.04k
            &&
26828
3.04k
            _PyPegen_lookahead_for_expr(0, annotated_rhs_rule, p)
26829
3.04k
        )
26830
22
        {
26831
22
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' !annotated_rhs"));
26832
22
            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting a valid expression after '{'" );
26833
22
            if (_res == NULL && PyErr_Occurred()) {
26834
22
                p->error_indicator = 1;
26835
22
                p->level--;
26836
22
                return NULL;
26837
22
            }
26838
0
            goto done;
26839
22
        }
26840
3.01k
        p->mark = _mark;
26841
3.01k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26842
3.01k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' !annotated_rhs"));
26843
3.01k
    }
26844
0
    { // '{' annotated_rhs !('=' | '!' | ':' | '}')
26845
3.01k
        if (p->error_indicator) {
26846
0
            p->level--;
26847
0
            return NULL;
26848
0
        }
26849
3.01k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26850
3.01k
        Token * _literal;
26851
3.01k
        expr_ty annotated_rhs_var;
26852
3.01k
        if (
26853
3.01k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26854
3.01k
            &&
26855
3.01k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26856
3.01k
            &&
26857
3.01k
            _PyPegen_lookahead(0, _tmp_148_rule, p)
26858
3.01k
        )
26859
19
        {
26860
19
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26861
19
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting '=', or '!', or ':', or '}'" );
26862
19
            if (_res == NULL && PyErr_Occurred()) {
26863
19
                p->error_indicator = 1;
26864
19
                p->level--;
26865
19
                return NULL;
26866
19
            }
26867
0
            goto done;
26868
19
        }
26869
2.99k
        p->mark = _mark;
26870
2.99k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26871
2.99k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26872
2.99k
    }
26873
0
    { // '{' annotated_rhs '=' !('!' | ':' | '}')
26874
2.99k
        if (p->error_indicator) {
26875
0
            p->level--;
26876
0
            return NULL;
26877
0
        }
26878
2.99k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26879
2.99k
        Token * _literal;
26880
2.99k
        Token * _literal_1;
26881
2.99k
        expr_ty annotated_rhs_var;
26882
2.99k
        if (
26883
2.99k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26884
2.99k
            &&
26885
2.99k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26886
2.99k
            &&
26887
2.99k
            (_literal_1 = _PyPegen_expect_token(p, 22))  // token='='
26888
2.99k
            &&
26889
2.99k
            _PyPegen_lookahead(0, _tmp_149_rule, p)
26890
2.99k
        )
26891
4
        {
26892
4
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26893
4
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting '!', or ':', or '}'" );
26894
4
            if (_res == NULL && PyErr_Occurred()) {
26895
4
                p->error_indicator = 1;
26896
4
                p->level--;
26897
4
                return NULL;
26898
4
            }
26899
0
            goto done;
26900
4
        }
26901
2.99k
        p->mark = _mark;
26902
2.99k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26903
2.99k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26904
2.99k
    }
26905
0
    { // '{' annotated_rhs '='? invalid_tstring_conversion_character
26906
2.99k
        if (p->error_indicator) {
26907
0
            p->level--;
26908
0
            return NULL;
26909
0
        }
26910
2.99k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? invalid_tstring_conversion_character"));
26911
2.99k
        Token * _literal;
26912
2.99k
        void *_opt_var;
26913
2.99k
        UNUSED(_opt_var); // Silence compiler warnings
26914
2.99k
        expr_ty annotated_rhs_var;
26915
2.99k
        void *invalid_tstring_conversion_character_var;
26916
2.99k
        if (
26917
2.99k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26918
2.99k
            &&
26919
2.99k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26920
2.99k
            &&
26921
2.99k
            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
26922
2.99k
            &&
26923
2.99k
            (invalid_tstring_conversion_character_var = invalid_tstring_conversion_character_rule(p))  // invalid_tstring_conversion_character
26924
2.99k
        )
26925
0
        {
26926
0
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? invalid_tstring_conversion_character"));
26927
0
            _res = _PyPegen_dummy_name(p, _literal, annotated_rhs_var, _opt_var, invalid_tstring_conversion_character_var);
26928
0
            goto done;
26929
0
        }
26930
2.99k
        p->mark = _mark;
26931
2.99k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26932
2.99k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? invalid_tstring_conversion_character"));
26933
2.99k
    }
26934
0
    { // '{' annotated_rhs '='? ['!' NAME] !(':' | '}')
26935
2.99k
        if (p->error_indicator) {
26936
3
            p->level--;
26937
3
            return NULL;
26938
3
        }
26939
2.99k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26940
2.99k
        Token * _literal;
26941
2.99k
        void *_opt_var;
26942
2.99k
        UNUSED(_opt_var); // Silence compiler warnings
26943
2.99k
        void *_opt_var_1;
26944
2.99k
        UNUSED(_opt_var_1); // Silence compiler warnings
26945
2.99k
        expr_ty annotated_rhs_var;
26946
2.99k
        if (
26947
2.99k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26948
2.99k
            &&
26949
2.99k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26950
2.99k
            &&
26951
2.99k
            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
26952
2.99k
            &&
26953
2.99k
            (_opt_var_1 = _tmp_150_rule(p), !p->error_indicator)  // ['!' NAME]
26954
2.99k
            &&
26955
2.99k
            _PyPegen_lookahead(0, _tmp_151_rule, p)
26956
2.99k
        )
26957
3
        {
26958
3
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26959
3
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting ':' or '}'" );
26960
3
            if (_res == NULL && PyErr_Occurred()) {
26961
3
                p->error_indicator = 1;
26962
3
                p->level--;
26963
3
                return NULL;
26964
3
            }
26965
0
            goto done;
26966
3
        }
26967
2.98k
        p->mark = _mark;
26968
2.98k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26969
2.98k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26970
2.98k
    }
26971
0
    { // '{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'
26972
2.98k
        if (p->error_indicator) {
26973
0
            p->level--;
26974
0
            return NULL;
26975
0
        }
26976
2.98k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26977
2.98k
        Token * _literal;
26978
2.98k
        Token * _literal_1;
26979
2.98k
        asdl_seq * _loop0_76_var;
26980
2.98k
        void *_opt_var;
26981
2.98k
        UNUSED(_opt_var); // Silence compiler warnings
26982
2.98k
        void *_opt_var_1;
26983
2.98k
        UNUSED(_opt_var_1); // Silence compiler warnings
26984
2.98k
        expr_ty annotated_rhs_var;
26985
2.98k
        if (
26986
2.98k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
26987
2.98k
            &&
26988
2.98k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
26989
2.98k
            &&
26990
2.98k
            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
26991
2.98k
            &&
26992
2.98k
            (_opt_var_1 = _tmp_150_rule(p), !p->error_indicator)  // ['!' NAME]
26993
2.98k
            &&
26994
2.98k
            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
26995
2.98k
            &&
26996
2.98k
            (_loop0_76_var = _loop0_76_rule(p))  // fstring_format_spec*
26997
2.98k
            &&
26998
2.98k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26)  // token='}'
26999
2.98k
        )
27000
10
        {
27001
10
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
27002
10
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting '}', or format specs" );
27003
10
            if (_res == NULL && PyErr_Occurred()) {
27004
10
                p->error_indicator = 1;
27005
10
                p->level--;
27006
10
                return NULL;
27007
10
            }
27008
0
            goto done;
27009
10
        }
27010
2.97k
        p->mark = _mark;
27011
2.97k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
27012
2.97k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
27013
2.97k
    }
27014
0
    { // '{' annotated_rhs '='? ['!' NAME] !'}'
27015
2.97k
        if (p->error_indicator) {
27016
0
            p->level--;
27017
0
            return NULL;
27018
0
        }
27019
2.97k
        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
27020
2.97k
        Token * _literal;
27021
2.97k
        void *_opt_var;
27022
2.97k
        UNUSED(_opt_var); // Silence compiler warnings
27023
2.97k
        void *_opt_var_1;
27024
2.97k
        UNUSED(_opt_var_1); // Silence compiler warnings
27025
2.97k
        expr_ty annotated_rhs_var;
27026
2.97k
        if (
27027
2.97k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
27028
2.97k
            &&
27029
2.97k
            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
27030
2.97k
            &&
27031
2.97k
            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
27032
2.97k
            &&
27033
2.97k
            (_opt_var_1 = _tmp_150_rule(p), !p->error_indicator)  // ['!' NAME]
27034
2.97k
            &&
27035
2.97k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26)  // token='}'
27036
2.97k
        )
27037
0
        {
27038
0
            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
27039
0
            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting '}'" );
27040
0
            if (_res == NULL && PyErr_Occurred()) {
27041
0
                p->error_indicator = 1;
27042
0
                p->level--;
27043
0
                return NULL;
27044
0
            }
27045
0
            goto done;
27046
0
        }
27047
2.97k
        p->mark = _mark;
27048
2.97k
        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
27049
2.97k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
27050
2.97k
    }
27051
0
    _res = NULL;
27052
2.97k
  done:
27053
2.97k
    p->level--;
27054
2.97k
    return _res;
27055
2.97k
}
27056
27057
// invalid_tstring_conversion_character: '!' &(':' | '}') | '!' !NAME
27058
static void *
27059
invalid_tstring_conversion_character_rule(Parser *p)
27060
16
{
27061
16
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27062
0
        _Pypegen_stack_overflow(p);
27063
0
    }
27064
16
    if (p->error_indicator) {
27065
0
        p->level--;
27066
0
        return NULL;
27067
0
    }
27068
16
    void * _res = NULL;
27069
16
    int _mark = p->mark;
27070
16
    { // '!' &(':' | '}')
27071
16
        if (p->error_indicator) {
27072
0
            p->level--;
27073
0
            return NULL;
27074
0
        }
27075
16
        D(fprintf(stderr, "%*c> invalid_tstring_conversion_character[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')"));
27076
16
        Token * _literal;
27077
16
        if (
27078
16
            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
27079
16
            &&
27080
16
            _PyPegen_lookahead(1, _tmp_151_rule, p)
27081
16
        )
27082
1
        {
27083
1
            D(fprintf(stderr, "%*c+ invalid_tstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')"));
27084
1
            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: missing conversion character" );
27085
1
            if (_res == NULL && PyErr_Occurred()) {
27086
1
                p->error_indicator = 1;
27087
1
                p->level--;
27088
1
                return NULL;
27089
1
            }
27090
0
            goto done;
27091
1
        }
27092
15
        p->mark = _mark;
27093
15
        D(fprintf(stderr, "%*c%s invalid_tstring_conversion_character[%d-%d]: %s failed!\n", p->level, ' ',
27094
15
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' &(':' | '}')"));
27095
15
    }
27096
0
    { // '!' !NAME
27097
15
        if (p->error_indicator) {
27098
0
            p->level--;
27099
0
            return NULL;
27100
0
        }
27101
15
        D(fprintf(stderr, "%*c> invalid_tstring_conversion_character[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' !NAME"));
27102
15
        Token * _literal;
27103
15
        if (
27104
15
            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
27105
15
            &&
27106
15
            _PyPegen_lookahead_for_expr(0, _PyPegen_name_token, p)
27107
15
        )
27108
2
        {
27109
2
            D(fprintf(stderr, "%*c+ invalid_tstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' !NAME"));
27110
2
            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: invalid conversion character" );
27111
2
            if (_res == NULL && PyErr_Occurred()) {
27112
2
                p->error_indicator = 1;
27113
2
                p->level--;
27114
2
                return NULL;
27115
2
            }
27116
0
            goto done;
27117
2
        }
27118
13
        p->mark = _mark;
27119
13
        D(fprintf(stderr, "%*c%s invalid_tstring_conversion_character[%d-%d]: %s failed!\n", p->level, ' ',
27120
13
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' !NAME"));
27121
13
    }
27122
0
    _res = NULL;
27123
13
  done:
27124
13
    p->level--;
27125
13
    return _res;
27126
13
}
27127
27128
// invalid_arithmetic: sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion
27129
static void *
27130
invalid_arithmetic_rule(Parser *p)
27131
267k
{
27132
267k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27133
0
        _Pypegen_stack_overflow(p);
27134
0
    }
27135
267k
    if (p->error_indicator) {
27136
0
        p->level--;
27137
0
        return NULL;
27138
0
    }
27139
267k
    void * _res = NULL;
27140
267k
    int _mark = p->mark;
27141
267k
    { // sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion
27142
267k
        if (p->error_indicator) {
27143
0
            p->level--;
27144
0
            return NULL;
27145
0
        }
27146
267k
        D(fprintf(stderr, "%*c> invalid_arithmetic[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion"));
27147
267k
        void *_tmp_152_var;
27148
267k
        Token * a;
27149
267k
        expr_ty b;
27150
267k
        expr_ty sum_var;
27151
267k
        if (
27152
267k
            (sum_var = sum_rule(p))  // sum
27153
267k
            &&
27154
267k
            (_tmp_152_var = _tmp_152_rule(p))  // '+' | '-' | '*' | '/' | '%' | '//' | '@'
27155
267k
            &&
27156
267k
            (a = _PyPegen_expect_token(p, 708))  // token='not'
27157
267k
            &&
27158
267k
            (b = inversion_rule(p))  // inversion
27159
267k
        )
27160
9
        {
27161
9
            D(fprintf(stderr, "%*c+ invalid_arithmetic[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion"));
27162
9
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "'not' after an operator must be parenthesized" );
27163
9
            if (_res == NULL && PyErr_Occurred()) {
27164
9
                p->error_indicator = 1;
27165
9
                p->level--;
27166
9
                return NULL;
27167
9
            }
27168
0
            goto done;
27169
9
        }
27170
267k
        p->mark = _mark;
27171
267k
        D(fprintf(stderr, "%*c%s invalid_arithmetic[%d-%d]: %s failed!\n", p->level, ' ',
27172
267k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion"));
27173
267k
    }
27174
0
    _res = NULL;
27175
267k
  done:
27176
267k
    p->level--;
27177
267k
    return _res;
27178
267k
}
27179
27180
// invalid_factor: ('+' | '-' | '~') 'not' factor
27181
static void *
27182
invalid_factor_rule(Parser *p)
27183
277k
{
27184
277k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27185
0
        _Pypegen_stack_overflow(p);
27186
0
    }
27187
277k
    if (p->error_indicator) {
27188
0
        p->level--;
27189
0
        return NULL;
27190
0
    }
27191
277k
    void * _res = NULL;
27192
277k
    int _mark = p->mark;
27193
277k
    { // ('+' | '-' | '~') 'not' factor
27194
277k
        if (p->error_indicator) {
27195
0
            p->level--;
27196
0
            return NULL;
27197
0
        }
27198
277k
        D(fprintf(stderr, "%*c> invalid_factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('+' | '-' | '~') 'not' factor"));
27199
277k
        void *_tmp_153_var;
27200
277k
        Token * a;
27201
277k
        expr_ty b;
27202
277k
        if (
27203
277k
            (_tmp_153_var = _tmp_153_rule(p))  // '+' | '-' | '~'
27204
277k
            &&
27205
277k
            (a = _PyPegen_expect_token(p, 708))  // token='not'
27206
277k
            &&
27207
277k
            (b = factor_rule(p))  // factor
27208
277k
        )
27209
1
        {
27210
1
            D(fprintf(stderr, "%*c+ invalid_factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('+' | '-' | '~') 'not' factor"));
27211
1
            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "'not' after an operator must be parenthesized" );
27212
1
            if (_res == NULL && PyErr_Occurred()) {
27213
1
                p->error_indicator = 1;
27214
1
                p->level--;
27215
1
                return NULL;
27216
1
            }
27217
0
            goto done;
27218
1
        }
27219
277k
        p->mark = _mark;
27220
277k
        D(fprintf(stderr, "%*c%s invalid_factor[%d-%d]: %s failed!\n", p->level, ' ',
27221
277k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('+' | '-' | '~') 'not' factor"));
27222
277k
    }
27223
0
    _res = NULL;
27224
277k
  done:
27225
277k
    p->level--;
27226
277k
    return _res;
27227
277k
}
27228
27229
// invalid_type_params: '[' ']'
27230
static void *
27231
invalid_type_params_rule(Parser *p)
27232
7.16k
{
27233
7.16k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27234
0
        _Pypegen_stack_overflow(p);
27235
0
    }
27236
7.16k
    if (p->error_indicator) {
27237
0
        p->level--;
27238
0
        return NULL;
27239
0
    }
27240
7.16k
    void * _res = NULL;
27241
7.16k
    int _mark = p->mark;
27242
7.16k
    { // '[' ']'
27243
7.16k
        if (p->error_indicator) {
27244
0
            p->level--;
27245
0
            return NULL;
27246
0
        }
27247
7.16k
        D(fprintf(stderr, "%*c> invalid_type_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' ']'"));
27248
7.16k
        Token * _literal;
27249
7.16k
        Token * token;
27250
7.16k
        if (
27251
7.16k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
27252
7.16k
            &&
27253
7.16k
            (token = _PyPegen_expect_token(p, 10))  // token=']'
27254
7.16k
        )
27255
3
        {
27256
3
            D(fprintf(stderr, "%*c+ invalid_type_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' ']'"));
27257
3
            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( token , "Type parameter list cannot be empty" );
27258
3
            if (_res == NULL && PyErr_Occurred()) {
27259
3
                p->error_indicator = 1;
27260
3
                p->level--;
27261
3
                return NULL;
27262
3
            }
27263
0
            goto done;
27264
3
        }
27265
7.16k
        p->mark = _mark;
27266
7.16k
        D(fprintf(stderr, "%*c%s invalid_type_params[%d-%d]: %s failed!\n", p->level, ' ',
27267
7.16k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' ']'"));
27268
7.16k
    }
27269
0
    _res = NULL;
27270
7.16k
  done:
27271
7.16k
    p->level--;
27272
7.16k
    return _res;
27273
7.16k
}
27274
27275
// _loop0_1: NEWLINE
27276
static asdl_seq *
27277
_loop0_1_rule(Parser *p)
27278
43
{
27279
43
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27280
0
        _Pypegen_stack_overflow(p);
27281
0
    }
27282
43
    if (p->error_indicator) {
27283
0
        p->level--;
27284
0
        return NULL;
27285
0
    }
27286
43
    void *_res = NULL;
27287
43
    int _mark = p->mark;
27288
43
    void **_children = PyMem_Malloc(sizeof(void *));
27289
43
    if (!_children) {
27290
0
        p->error_indicator = 1;
27291
0
        PyErr_NoMemory();
27292
0
        p->level--;
27293
0
        return NULL;
27294
0
    }
27295
43
    Py_ssize_t _children_capacity = 1;
27296
43
    Py_ssize_t _n = 0;
27297
43
    { // NEWLINE
27298
43
        if (p->error_indicator) {
27299
0
            p->level--;
27300
0
            return NULL;
27301
0
        }
27302
43
        D(fprintf(stderr, "%*c> _loop0_1[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
27303
43
        Token * newline_var;
27304
43
        while (
27305
43
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
27306
43
        )
27307
0
        {
27308
0
            _res = newline_var;
27309
0
            if (_n == _children_capacity) {
27310
0
                _children_capacity *= 2;
27311
0
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
27312
0
                if (!_new_children) {
27313
0
                    PyMem_Free(_children);
27314
0
                    p->error_indicator = 1;
27315
0
                    PyErr_NoMemory();
27316
0
                    p->level--;
27317
0
                    return NULL;
27318
0
                }
27319
0
                _children = _new_children;
27320
0
            }
27321
0
            _children[_n++] = _res;
27322
0
            _mark = p->mark;
27323
0
        }
27324
43
        p->mark = _mark;
27325
43
        D(fprintf(stderr, "%*c%s _loop0_1[%d-%d]: %s failed!\n", p->level, ' ',
27326
43
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
27327
43
    }
27328
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
27329
43
    if (!_seq) {
27330
0
        PyMem_Free(_children);
27331
0
        p->error_indicator = 1;
27332
0
        PyErr_NoMemory();
27333
0
        p->level--;
27334
0
        return NULL;
27335
0
    }
27336
43
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
27337
43
    PyMem_Free(_children);
27338
43
    p->level--;
27339
43
    return _seq;
27340
43
}
27341
27342
// _loop1_2: statement
27343
static asdl_seq *
27344
_loop1_2_rule(Parser *p)
27345
46.2k
{
27346
46.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27347
0
        _Pypegen_stack_overflow(p);
27348
0
    }
27349
46.2k
    if (p->error_indicator) {
27350
0
        p->level--;
27351
0
        return NULL;
27352
0
    }
27353
46.2k
    void *_res = NULL;
27354
46.2k
    int _mark = p->mark;
27355
46.2k
    void **_children = PyMem_Malloc(sizeof(void *));
27356
46.2k
    if (!_children) {
27357
0
        p->error_indicator = 1;
27358
0
        PyErr_NoMemory();
27359
0
        p->level--;
27360
0
        return NULL;
27361
0
    }
27362
46.2k
    Py_ssize_t _children_capacity = 1;
27363
46.2k
    Py_ssize_t _n = 0;
27364
46.2k
    { // statement
27365
46.2k
        if (p->error_indicator) {
27366
0
            p->level--;
27367
0
            return NULL;
27368
0
        }
27369
46.2k
        D(fprintf(stderr, "%*c> _loop1_2[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement"));
27370
46.2k
        asdl_stmt_seq* statement_var;
27371
46.2k
        while (
27372
156k
            (statement_var = statement_rule(p))  // statement
27373
46.2k
        )
27374
110k
        {
27375
110k
            _res = statement_var;
27376
110k
            if (_n == _children_capacity) {
27377
21.7k
                _children_capacity *= 2;
27378
21.7k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
27379
21.7k
                if (!_new_children) {
27380
0
                    PyMem_Free(_children);
27381
0
                    p->error_indicator = 1;
27382
0
                    PyErr_NoMemory();
27383
0
                    p->level--;
27384
0
                    return NULL;
27385
0
                }
27386
21.7k
                _children = _new_children;
27387
21.7k
            }
27388
110k
            _children[_n++] = _res;
27389
110k
            _mark = p->mark;
27390
110k
        }
27391
46.2k
        p->mark = _mark;
27392
46.2k
        D(fprintf(stderr, "%*c%s _loop1_2[%d-%d]: %s failed!\n", p->level, ' ',
27393
46.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement"));
27394
46.2k
    }
27395
46.2k
    if (_n == 0 || p->error_indicator) {
27396
20.2k
        PyMem_Free(_children);
27397
20.2k
        p->level--;
27398
20.2k
        return NULL;
27399
20.2k
    }
27400
26.0k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
27401
26.0k
    if (!_seq) {
27402
0
        PyMem_Free(_children);
27403
0
        p->error_indicator = 1;
27404
0
        PyErr_NoMemory();
27405
0
        p->level--;
27406
0
        return NULL;
27407
0
    }
27408
132k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
27409
26.0k
    PyMem_Free(_children);
27410
26.0k
    p->level--;
27411
26.0k
    return _seq;
27412
26.0k
}
27413
27414
// _loop0_3: ';' simple_stmt
27415
static asdl_seq *
27416
_loop0_3_rule(Parser *p)
27417
11.7k
{
27418
11.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27419
0
        _Pypegen_stack_overflow(p);
27420
0
    }
27421
11.7k
    if (p->error_indicator) {
27422
0
        p->level--;
27423
0
        return NULL;
27424
0
    }
27425
11.7k
    void *_res = NULL;
27426
11.7k
    int _mark = p->mark;
27427
11.7k
    void **_children = PyMem_Malloc(sizeof(void *));
27428
11.7k
    if (!_children) {
27429
0
        p->error_indicator = 1;
27430
0
        PyErr_NoMemory();
27431
0
        p->level--;
27432
0
        return NULL;
27433
0
    }
27434
11.7k
    Py_ssize_t _children_capacity = 1;
27435
11.7k
    Py_ssize_t _n = 0;
27436
11.7k
    { // ';' simple_stmt
27437
11.7k
        if (p->error_indicator) {
27438
0
            p->level--;
27439
0
            return NULL;
27440
0
        }
27441
11.7k
        D(fprintf(stderr, "%*c> _loop0_3[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' simple_stmt"));
27442
11.7k
        Token * _literal;
27443
11.7k
        stmt_ty elem;
27444
11.7k
        while (
27445
29.2k
            (_literal = _PyPegen_expect_token(p, 13))  // token=';'
27446
29.2k
            &&
27447
29.2k
            (elem = simple_stmt_rule(p))  // simple_stmt
27448
11.7k
        )
27449
17.5k
        {
27450
17.5k
            _res = elem;
27451
17.5k
            if (_res == NULL && PyErr_Occurred()) {
27452
0
                p->error_indicator = 1;
27453
0
                PyMem_Free(_children);
27454
0
                p->level--;
27455
0
                return NULL;
27456
0
            }
27457
17.5k
            if (_n == _children_capacity) {
27458
3.02k
                _children_capacity *= 2;
27459
3.02k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
27460
3.02k
                if (!_new_children) {
27461
0
                    PyMem_Free(_children);
27462
0
                    p->error_indicator = 1;
27463
0
                    PyErr_NoMemory();
27464
0
                    p->level--;
27465
0
                    return NULL;
27466
0
                }
27467
3.02k
                _children = _new_children;
27468
3.02k
            }
27469
17.5k
            _children[_n++] = _res;
27470
17.5k
            _mark = p->mark;
27471
17.5k
        }
27472
11.7k
        p->mark = _mark;
27473
11.7k
        D(fprintf(stderr, "%*c%s _loop0_3[%d-%d]: %s failed!\n", p->level, ' ',
27474
11.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';' simple_stmt"));
27475
11.7k
    }
27476
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
27477
11.7k
    if (!_seq) {
27478
0
        PyMem_Free(_children);
27479
0
        p->error_indicator = 1;
27480
0
        PyErr_NoMemory();
27481
0
        p->level--;
27482
0
        return NULL;
27483
0
    }
27484
29.2k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
27485
11.7k
    PyMem_Free(_children);
27486
11.7k
    p->level--;
27487
11.7k
    return _seq;
27488
11.7k
}
27489
27490
// _gather_4: simple_stmt _loop0_3
27491
static asdl_seq *
27492
_gather_4_rule(Parser *p)
27493
44.9k
{
27494
44.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27495
0
        _Pypegen_stack_overflow(p);
27496
0
    }
27497
44.9k
    if (p->error_indicator) {
27498
0
        p->level--;
27499
0
        return NULL;
27500
0
    }
27501
44.9k
    asdl_seq * _res = NULL;
27502
44.9k
    int _mark = p->mark;
27503
44.9k
    { // simple_stmt _loop0_3
27504
44.9k
        if (p->error_indicator) {
27505
0
            p->level--;
27506
0
            return NULL;
27507
0
        }
27508
44.9k
        D(fprintf(stderr, "%*c> _gather_4[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_3"));
27509
44.9k
        stmt_ty elem;
27510
44.9k
        asdl_seq * seq;
27511
44.9k
        if (
27512
44.9k
            (elem = simple_stmt_rule(p))  // simple_stmt
27513
44.9k
            &&
27514
44.9k
            (seq = _loop0_3_rule(p))  // _loop0_3
27515
44.9k
        )
27516
11.7k
        {
27517
11.7k
            D(fprintf(stderr, "%*c+ _gather_4[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_3"));
27518
11.7k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
27519
11.7k
            goto done;
27520
11.7k
        }
27521
33.2k
        p->mark = _mark;
27522
33.2k
        D(fprintf(stderr, "%*c%s _gather_4[%d-%d]: %s failed!\n", p->level, ' ',
27523
33.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt _loop0_3"));
27524
33.2k
    }
27525
0
    _res = NULL;
27526
44.9k
  done:
27527
44.9k
    p->level--;
27528
44.9k
    return _res;
27529
33.2k
}
27530
27531
// _tmp_5: 'import' | 'from'
27532
static void *
27533
_tmp_5_rule(Parser *p)
27534
51.0k
{
27535
51.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27536
0
        _Pypegen_stack_overflow(p);
27537
0
    }
27538
51.0k
    if (p->error_indicator) {
27539
0
        p->level--;
27540
0
        return NULL;
27541
0
    }
27542
51.0k
    void * _res = NULL;
27543
51.0k
    int _mark = p->mark;
27544
51.0k
    { // 'import'
27545
51.0k
        if (p->error_indicator) {
27546
0
            p->level--;
27547
0
            return NULL;
27548
0
        }
27549
51.0k
        D(fprintf(stderr, "%*c> _tmp_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import'"));
27550
51.0k
        Token * _keyword;
27551
51.0k
        if (
27552
51.0k
            (_keyword = _PyPegen_expect_token(p, 639))  // token='import'
27553
51.0k
        )
27554
2.19k
        {
27555
2.19k
            D(fprintf(stderr, "%*c+ _tmp_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import'"));
27556
2.19k
            _res = _keyword;
27557
2.19k
            goto done;
27558
2.19k
        }
27559
48.8k
        p->mark = _mark;
27560
48.8k
        D(fprintf(stderr, "%*c%s _tmp_5[%d-%d]: %s failed!\n", p->level, ' ',
27561
48.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import'"));
27562
48.8k
    }
27563
0
    { // 'from'
27564
48.8k
        if (p->error_indicator) {
27565
0
            p->level--;
27566
0
            return NULL;
27567
0
        }
27568
48.8k
        D(fprintf(stderr, "%*c> _tmp_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from'"));
27569
48.8k
        Token * _keyword;
27570
48.8k
        if (
27571
48.8k
            (_keyword = _PyPegen_expect_token(p, 638))  // token='from'
27572
48.8k
        )
27573
2.76k
        {
27574
2.76k
            D(fprintf(stderr, "%*c+ _tmp_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from'"));
27575
2.76k
            _res = _keyword;
27576
2.76k
            goto done;
27577
2.76k
        }
27578
46.0k
        p->mark = _mark;
27579
46.0k
        D(fprintf(stderr, "%*c%s _tmp_5[%d-%d]: %s failed!\n", p->level, ' ',
27580
46.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from'"));
27581
46.0k
    }
27582
0
    _res = NULL;
27583
51.0k
  done:
27584
51.0k
    p->level--;
27585
51.0k
    return _res;
27586
46.0k
}
27587
27588
// _tmp_6: 'def' | '@' | 'async'
27589
static void *
27590
_tmp_6_rule(Parser *p)
27591
156k
{
27592
156k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27593
0
        _Pypegen_stack_overflow(p);
27594
0
    }
27595
156k
    if (p->error_indicator) {
27596
0
        p->level--;
27597
0
        return NULL;
27598
0
    }
27599
156k
    void * _res = NULL;
27600
156k
    int _mark = p->mark;
27601
156k
    { // 'def'
27602
156k
        if (p->error_indicator) {
27603
0
            p->level--;
27604
0
            return NULL;
27605
0
        }
27606
156k
        D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'"));
27607
156k
        Token * _keyword;
27608
156k
        if (
27609
156k
            (_keyword = _PyPegen_expect_token(p, 704))  // token='def'
27610
156k
        )
27611
8.97k
        {
27612
8.97k
            D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def'"));
27613
8.97k
            _res = _keyword;
27614
8.97k
            goto done;
27615
8.97k
        }
27616
147k
        p->mark = _mark;
27617
147k
        D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ',
27618
147k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def'"));
27619
147k
    }
27620
0
    { // '@'
27621
147k
        if (p->error_indicator) {
27622
1.14k
            p->level--;
27623
1.14k
            return NULL;
27624
1.14k
        }
27625
146k
        D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
27626
146k
        Token * _literal;
27627
146k
        if (
27628
146k
            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
27629
146k
        )
27630
1.86k
        {
27631
1.86k
            D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'"));
27632
1.86k
            _res = _literal;
27633
1.86k
            goto done;
27634
1.86k
        }
27635
144k
        p->mark = _mark;
27636
144k
        D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ',
27637
144k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'"));
27638
144k
    }
27639
0
    { // 'async'
27640
144k
        if (p->error_indicator) {
27641
0
            p->level--;
27642
0
            return NULL;
27643
0
        }
27644
144k
        D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'"));
27645
144k
        Token * _keyword;
27646
144k
        if (
27647
144k
            (_keyword = _PyPegen_expect_token(p, 703))  // token='async'
27648
144k
        )
27649
1.87k
        {
27650
1.87k
            D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'"));
27651
1.87k
            _res = _keyword;
27652
1.87k
            goto done;
27653
1.87k
        }
27654
142k
        p->mark = _mark;
27655
142k
        D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ',
27656
142k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'"));
27657
142k
    }
27658
0
    _res = NULL;
27659
155k
  done:
27660
155k
    p->level--;
27661
155k
    return _res;
27662
142k
}
27663
27664
// _tmp_7: 'class' | '@'
27665
static void *
27666
_tmp_7_rule(Parser *p)
27667
137k
{
27668
137k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27669
0
        _Pypegen_stack_overflow(p);
27670
0
    }
27671
137k
    if (p->error_indicator) {
27672
0
        p->level--;
27673
0
        return NULL;
27674
0
    }
27675
137k
    void * _res = NULL;
27676
137k
    int _mark = p->mark;
27677
137k
    { // 'class'
27678
137k
        if (p->error_indicator) {
27679
0
            p->level--;
27680
0
            return NULL;
27681
0
        }
27682
137k
        D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'"));
27683
137k
        Token * _keyword;
27684
137k
        if (
27685
137k
            (_keyword = _PyPegen_expect_token(p, 706))  // token='class'
27686
137k
        )
27687
3.11k
        {
27688
3.11k
            D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class'"));
27689
3.11k
            _res = _keyword;
27690
3.11k
            goto done;
27691
3.11k
        }
27692
134k
        p->mark = _mark;
27693
134k
        D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ',
27694
134k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class'"));
27695
134k
    }
27696
0
    { // '@'
27697
134k
        if (p->error_indicator) {
27698
0
            p->level--;
27699
0
            return NULL;
27700
0
        }
27701
134k
        D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
27702
134k
        Token * _literal;
27703
134k
        if (
27704
134k
            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
27705
134k
        )
27706
766
        {
27707
766
            D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'"));
27708
766
            _res = _literal;
27709
766
            goto done;
27710
766
        }
27711
133k
        p->mark = _mark;
27712
133k
        D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ',
27713
133k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'"));
27714
133k
    }
27715
0
    _res = NULL;
27716
137k
  done:
27717
137k
    p->level--;
27718
137k
    return _res;
27719
133k
}
27720
27721
// _tmp_8: 'with' | 'async'
27722
static void *
27723
_tmp_8_rule(Parser *p)
27724
134k
{
27725
134k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27726
0
        _Pypegen_stack_overflow(p);
27727
0
    }
27728
134k
    if (p->error_indicator) {
27729
0
        p->level--;
27730
0
        return NULL;
27731
0
    }
27732
134k
    void * _res = NULL;
27733
134k
    int _mark = p->mark;
27734
134k
    { // 'with'
27735
134k
        if (p->error_indicator) {
27736
0
            p->level--;
27737
0
            return NULL;
27738
0
        }
27739
134k
        D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'"));
27740
134k
        Token * _keyword;
27741
134k
        if (
27742
134k
            (_keyword = _PyPegen_expect_token(p, 652))  // token='with'
27743
134k
        )
27744
3.45k
        {
27745
3.45k
            D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with'"));
27746
3.45k
            _res = _keyword;
27747
3.45k
            goto done;
27748
3.45k
        }
27749
130k
        p->mark = _mark;
27750
130k
        D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ',
27751
130k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with'"));
27752
130k
    }
27753
0
    { // 'async'
27754
130k
        if (p->error_indicator) {
27755
0
            p->level--;
27756
0
            return NULL;
27757
0
        }
27758
130k
        D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'"));
27759
130k
        Token * _keyword;
27760
130k
        if (
27761
130k
            (_keyword = _PyPegen_expect_token(p, 703))  // token='async'
27762
130k
        )
27763
1.32k
        {
27764
1.32k
            D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'"));
27765
1.32k
            _res = _keyword;
27766
1.32k
            goto done;
27767
1.32k
        }
27768
129k
        p->mark = _mark;
27769
129k
        D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ',
27770
129k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'"));
27771
129k
    }
27772
0
    _res = NULL;
27773
134k
  done:
27774
134k
    p->level--;
27775
134k
    return _res;
27776
129k
}
27777
27778
// _tmp_9: 'for' | 'async'
27779
static void *
27780
_tmp_9_rule(Parser *p)
27781
130k
{
27782
130k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27783
0
        _Pypegen_stack_overflow(p);
27784
0
    }
27785
130k
    if (p->error_indicator) {
27786
0
        p->level--;
27787
0
        return NULL;
27788
0
    }
27789
130k
    void * _res = NULL;
27790
130k
    int _mark = p->mark;
27791
130k
    { // 'for'
27792
130k
        if (p->error_indicator) {
27793
0
            p->level--;
27794
0
            return NULL;
27795
0
        }
27796
130k
        D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'"));
27797
130k
        Token * _keyword;
27798
130k
        if (
27799
130k
            (_keyword = _PyPegen_expect_token(p, 699))  // token='for'
27800
130k
        )
27801
1.70k
        {
27802
1.70k
            D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for'"));
27803
1.70k
            _res = _keyword;
27804
1.70k
            goto done;
27805
1.70k
        }
27806
128k
        p->mark = _mark;
27807
128k
        D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ',
27808
128k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for'"));
27809
128k
    }
27810
0
    { // 'async'
27811
128k
        if (p->error_indicator) {
27812
0
            p->level--;
27813
0
            return NULL;
27814
0
        }
27815
128k
        D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'"));
27816
128k
        Token * _keyword;
27817
128k
        if (
27818
128k
            (_keyword = _PyPegen_expect_token(p, 703))  // token='async'
27819
128k
        )
27820
379
        {
27821
379
            D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'"));
27822
379
            _res = _keyword;
27823
379
            goto done;
27824
379
        }
27825
128k
        p->mark = _mark;
27826
128k
        D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ',
27827
128k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'"));
27828
128k
    }
27829
0
    _res = NULL;
27830
130k
  done:
27831
130k
    p->level--;
27832
130k
    return _res;
27833
128k
}
27834
27835
// _tmp_10: '=' annotated_rhs
27836
static void *
27837
_tmp_10_rule(Parser *p)
27838
3.22k
{
27839
3.22k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27840
0
        _Pypegen_stack_overflow(p);
27841
0
    }
27842
3.22k
    if (p->error_indicator) {
27843
0
        p->level--;
27844
0
        return NULL;
27845
0
    }
27846
3.22k
    void * _res = NULL;
27847
3.22k
    int _mark = p->mark;
27848
3.22k
    { // '=' annotated_rhs
27849
3.22k
        if (p->error_indicator) {
27850
0
            p->level--;
27851
0
            return NULL;
27852
0
        }
27853
3.22k
        D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
27854
3.22k
        Token * _literal;
27855
3.22k
        expr_ty d;
27856
3.22k
        if (
27857
3.22k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
27858
3.22k
            &&
27859
3.22k
            (d = annotated_rhs_rule(p))  // annotated_rhs
27860
3.22k
        )
27861
475
        {
27862
475
            D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
27863
475
            _res = d;
27864
475
            if (_res == NULL && PyErr_Occurred()) {
27865
0
                p->error_indicator = 1;
27866
0
                p->level--;
27867
0
                return NULL;
27868
0
            }
27869
475
            goto done;
27870
475
        }
27871
2.75k
        p->mark = _mark;
27872
2.75k
        D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ',
27873
2.75k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs"));
27874
2.75k
    }
27875
0
    _res = NULL;
27876
3.22k
  done:
27877
3.22k
    p->level--;
27878
3.22k
    return _res;
27879
2.75k
}
27880
27881
// _tmp_11: '(' single_target ')' | single_subscript_attribute_target
27882
static void *
27883
_tmp_11_rule(Parser *p)
27884
170k
{
27885
170k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27886
0
        _Pypegen_stack_overflow(p);
27887
0
    }
27888
170k
    if (p->error_indicator) {
27889
0
        p->level--;
27890
0
        return NULL;
27891
0
    }
27892
170k
    void * _res = NULL;
27893
170k
    int _mark = p->mark;
27894
170k
    { // '(' single_target ')'
27895
170k
        if (p->error_indicator) {
27896
0
            p->level--;
27897
0
            return NULL;
27898
0
        }
27899
170k
        D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
27900
170k
        Token * _literal;
27901
170k
        Token * _literal_1;
27902
170k
        expr_ty b;
27903
170k
        if (
27904
170k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
27905
170k
            &&
27906
170k
            (b = single_target_rule(p))  // single_target
27907
170k
            &&
27908
170k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
27909
170k
        )
27910
197
        {
27911
197
            D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
27912
197
            _res = b;
27913
197
            if (_res == NULL && PyErr_Occurred()) {
27914
0
                p->error_indicator = 1;
27915
0
                p->level--;
27916
0
                return NULL;
27917
0
            }
27918
197
            goto done;
27919
197
        }
27920
169k
        p->mark = _mark;
27921
169k
        D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ',
27922
169k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'"));
27923
169k
    }
27924
0
    { // single_subscript_attribute_target
27925
169k
        if (p->error_indicator) {
27926
155
            p->level--;
27927
155
            return NULL;
27928
155
        }
27929
169k
        D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
27930
169k
        expr_ty single_subscript_attribute_target_var;
27931
169k
        if (
27932
169k
            (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p))  // single_subscript_attribute_target
27933
169k
        )
27934
4.78k
        {
27935
4.78k
            D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
27936
4.78k
            _res = single_subscript_attribute_target_var;
27937
4.78k
            goto done;
27938
4.78k
        }
27939
164k
        p->mark = _mark;
27940
164k
        D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ',
27941
164k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target"));
27942
164k
    }
27943
0
    _res = NULL;
27944
169k
  done:
27945
169k
    p->level--;
27946
169k
    return _res;
27947
164k
}
27948
27949
// _loop1_12: (star_targets '=')
27950
static asdl_seq *
27951
_loop1_12_rule(Parser *p)
27952
166k
{
27953
166k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
27954
0
        _Pypegen_stack_overflow(p);
27955
0
    }
27956
166k
    if (p->error_indicator) {
27957
0
        p->level--;
27958
0
        return NULL;
27959
0
    }
27960
166k
    void *_res = NULL;
27961
166k
    int _mark = p->mark;
27962
166k
    void **_children = PyMem_Malloc(sizeof(void *));
27963
166k
    if (!_children) {
27964
0
        p->error_indicator = 1;
27965
0
        PyErr_NoMemory();
27966
0
        p->level--;
27967
0
        return NULL;
27968
0
    }
27969
166k
    Py_ssize_t _children_capacity = 1;
27970
166k
    Py_ssize_t _n = 0;
27971
166k
    { // (star_targets '=')
27972
166k
        if (p->error_indicator) {
27973
0
            p->level--;
27974
0
            return NULL;
27975
0
        }
27976
166k
        D(fprintf(stderr, "%*c> _loop1_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
27977
166k
        void *_tmp_154_var;
27978
166k
        while (
27979
180k
            (_tmp_154_var = _tmp_154_rule(p))  // star_targets '='
27980
166k
        )
27981
14.5k
        {
27982
14.5k
            _res = _tmp_154_var;
27983
14.5k
            if (_n == _children_capacity) {
27984
510
                _children_capacity *= 2;
27985
510
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
27986
510
                if (!_new_children) {
27987
0
                    PyMem_Free(_children);
27988
0
                    p->error_indicator = 1;
27989
0
                    PyErr_NoMemory();
27990
0
                    p->level--;
27991
0
                    return NULL;
27992
0
                }
27993
510
                _children = _new_children;
27994
510
            }
27995
14.5k
            _children[_n++] = _res;
27996
14.5k
            _mark = p->mark;
27997
14.5k
        }
27998
166k
        p->mark = _mark;
27999
166k
        D(fprintf(stderr, "%*c%s _loop1_12[%d-%d]: %s failed!\n", p->level, ' ',
28000
166k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')"));
28001
166k
    }
28002
166k
    if (_n == 0 || p->error_indicator) {
28003
153k
        PyMem_Free(_children);
28004
153k
        p->level--;
28005
153k
        return NULL;
28006
153k
    }
28007
13.0k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28008
13.0k
    if (!_seq) {
28009
0
        PyMem_Free(_children);
28010
0
        p->error_indicator = 1;
28011
0
        PyErr_NoMemory();
28012
0
        p->level--;
28013
0
        return NULL;
28014
0
    }
28015
27.4k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
28016
13.0k
    PyMem_Free(_children);
28017
13.0k
    p->level--;
28018
13.0k
    return _seq;
28019
13.0k
}
28020
28021
// _loop0_13: ',' NAME
28022
static asdl_seq *
28023
_loop0_13_rule(Parser *p)
28024
1.34k
{
28025
1.34k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28026
0
        _Pypegen_stack_overflow(p);
28027
0
    }
28028
1.34k
    if (p->error_indicator) {
28029
0
        p->level--;
28030
0
        return NULL;
28031
0
    }
28032
1.34k
    void *_res = NULL;
28033
1.34k
    int _mark = p->mark;
28034
1.34k
    void **_children = PyMem_Malloc(sizeof(void *));
28035
1.34k
    if (!_children) {
28036
0
        p->error_indicator = 1;
28037
0
        PyErr_NoMemory();
28038
0
        p->level--;
28039
0
        return NULL;
28040
0
    }
28041
1.34k
    Py_ssize_t _children_capacity = 1;
28042
1.34k
    Py_ssize_t _n = 0;
28043
1.34k
    { // ',' NAME
28044
1.34k
        if (p->error_indicator) {
28045
0
            p->level--;
28046
0
            return NULL;
28047
0
        }
28048
1.34k
        D(fprintf(stderr, "%*c> _loop0_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME"));
28049
1.34k
        Token * _literal;
28050
1.34k
        expr_ty elem;
28051
1.34k
        while (
28052
3.96k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
28053
3.96k
            &&
28054
3.96k
            (elem = _PyPegen_name_token(p))  // NAME
28055
1.34k
        )
28056
2.62k
        {
28057
2.62k
            _res = elem;
28058
2.62k
            if (_res == NULL && PyErr_Occurred()) {
28059
0
                p->error_indicator = 1;
28060
0
                PyMem_Free(_children);
28061
0
                p->level--;
28062
0
                return NULL;
28063
0
            }
28064
2.62k
            if (_n == _children_capacity) {
28065
918
                _children_capacity *= 2;
28066
918
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28067
918
                if (!_new_children) {
28068
0
                    PyMem_Free(_children);
28069
0
                    p->error_indicator = 1;
28070
0
                    PyErr_NoMemory();
28071
0
                    p->level--;
28072
0
                    return NULL;
28073
0
                }
28074
918
                _children = _new_children;
28075
918
            }
28076
2.62k
            _children[_n++] = _res;
28077
2.62k
            _mark = p->mark;
28078
2.62k
        }
28079
1.34k
        p->mark = _mark;
28080
1.34k
        D(fprintf(stderr, "%*c%s _loop0_13[%d-%d]: %s failed!\n", p->level, ' ',
28081
1.34k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME"));
28082
1.34k
    }
28083
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28084
1.34k
    if (!_seq) {
28085
0
        PyMem_Free(_children);
28086
0
        p->error_indicator = 1;
28087
0
        PyErr_NoMemory();
28088
0
        p->level--;
28089
0
        return NULL;
28090
0
    }
28091
3.96k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
28092
1.34k
    PyMem_Free(_children);
28093
1.34k
    p->level--;
28094
1.34k
    return _seq;
28095
1.34k
}
28096
28097
// _gather_14: NAME _loop0_13
28098
static asdl_seq *
28099
_gather_14_rule(Parser *p)
28100
1.35k
{
28101
1.35k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28102
0
        _Pypegen_stack_overflow(p);
28103
0
    }
28104
1.35k
    if (p->error_indicator) {
28105
0
        p->level--;
28106
0
        return NULL;
28107
0
    }
28108
1.35k
    asdl_seq * _res = NULL;
28109
1.35k
    int _mark = p->mark;
28110
1.35k
    { // NAME _loop0_13
28111
1.35k
        if (p->error_indicator) {
28112
0
            p->level--;
28113
0
            return NULL;
28114
0
        }
28115
1.35k
        D(fprintf(stderr, "%*c> _gather_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_13"));
28116
1.35k
        expr_ty elem;
28117
1.35k
        asdl_seq * seq;
28118
1.35k
        if (
28119
1.35k
            (elem = _PyPegen_name_token(p))  // NAME
28120
1.35k
            &&
28121
1.35k
            (seq = _loop0_13_rule(p))  // _loop0_13
28122
1.35k
        )
28123
1.34k
        {
28124
1.34k
            D(fprintf(stderr, "%*c+ _gather_14[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_13"));
28125
1.34k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
28126
1.34k
            goto done;
28127
1.34k
        }
28128
8
        p->mark = _mark;
28129
8
        D(fprintf(stderr, "%*c%s _gather_14[%d-%d]: %s failed!\n", p->level, ' ',
28130
8
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_13"));
28131
8
    }
28132
0
    _res = NULL;
28133
1.35k
  done:
28134
1.35k
    p->level--;
28135
1.35k
    return _res;
28136
8
}
28137
28138
// _tmp_15: ';' | NEWLINE
28139
static void *
28140
_tmp_15_rule(Parser *p)
28141
1.03k
{
28142
1.03k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28143
0
        _Pypegen_stack_overflow(p);
28144
0
    }
28145
1.03k
    if (p->error_indicator) {
28146
0
        p->level--;
28147
0
        return NULL;
28148
0
    }
28149
1.03k
    void * _res = NULL;
28150
1.03k
    int _mark = p->mark;
28151
1.03k
    { // ';'
28152
1.03k
        if (p->error_indicator) {
28153
0
            p->level--;
28154
0
            return NULL;
28155
0
        }
28156
1.03k
        D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'"));
28157
1.03k
        Token * _literal;
28158
1.03k
        if (
28159
1.03k
            (_literal = _PyPegen_expect_token(p, 13))  // token=';'
28160
1.03k
        )
28161
455
        {
28162
455
            D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'"));
28163
455
            _res = _literal;
28164
455
            goto done;
28165
455
        }
28166
583
        p->mark = _mark;
28167
583
        D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ',
28168
583
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'"));
28169
583
    }
28170
0
    { // NEWLINE
28171
583
        if (p->error_indicator) {
28172
0
            p->level--;
28173
0
            return NULL;
28174
0
        }
28175
583
        D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
28176
583
        Token * newline_var;
28177
583
        if (
28178
583
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
28179
583
        )
28180
295
        {
28181
295
            D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
28182
295
            _res = newline_var;
28183
295
            goto done;
28184
295
        }
28185
288
        p->mark = _mark;
28186
288
        D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ',
28187
288
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
28188
288
    }
28189
0
    _res = NULL;
28190
1.03k
  done:
28191
1.03k
    p->level--;
28192
1.03k
    return _res;
28193
288
}
28194
28195
// _tmp_16: ',' expression
28196
static void *
28197
_tmp_16_rule(Parser *p)
28198
4.83k
{
28199
4.83k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28200
0
        _Pypegen_stack_overflow(p);
28201
0
    }
28202
4.83k
    if (p->error_indicator) {
28203
0
        p->level--;
28204
0
        return NULL;
28205
0
    }
28206
4.83k
    void * _res = NULL;
28207
4.83k
    int _mark = p->mark;
28208
4.83k
    { // ',' expression
28209
4.83k
        if (p->error_indicator) {
28210
0
            p->level--;
28211
0
            return NULL;
28212
0
        }
28213
4.83k
        D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
28214
4.83k
        Token * _literal;
28215
4.83k
        expr_ty z;
28216
4.83k
        if (
28217
4.83k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
28218
4.83k
            &&
28219
4.83k
            (z = expression_rule(p))  // expression
28220
4.83k
        )
28221
1.57k
        {
28222
1.57k
            D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression"));
28223
1.57k
            _res = z;
28224
1.57k
            if (_res == NULL && PyErr_Occurred()) {
28225
0
                p->error_indicator = 1;
28226
0
                p->level--;
28227
0
                return NULL;
28228
0
            }
28229
1.57k
            goto done;
28230
1.57k
        }
28231
3.26k
        p->mark = _mark;
28232
3.26k
        D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ',
28233
3.26k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression"));
28234
3.26k
    }
28235
0
    _res = NULL;
28236
4.83k
  done:
28237
4.83k
    p->level--;
28238
4.83k
    return _res;
28239
3.26k
}
28240
28241
// _loop0_17: ('.' | '...')
28242
static asdl_seq *
28243
_loop0_17_rule(Parser *p)
28244
2.76k
{
28245
2.76k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28246
0
        _Pypegen_stack_overflow(p);
28247
0
    }
28248
2.76k
    if (p->error_indicator) {
28249
0
        p->level--;
28250
0
        return NULL;
28251
0
    }
28252
2.76k
    void *_res = NULL;
28253
2.76k
    int _mark = p->mark;
28254
2.76k
    void **_children = PyMem_Malloc(sizeof(void *));
28255
2.76k
    if (!_children) {
28256
0
        p->error_indicator = 1;
28257
0
        PyErr_NoMemory();
28258
0
        p->level--;
28259
0
        return NULL;
28260
0
    }
28261
2.76k
    Py_ssize_t _children_capacity = 1;
28262
2.76k
    Py_ssize_t _n = 0;
28263
2.76k
    { // ('.' | '...')
28264
2.76k
        if (p->error_indicator) {
28265
0
            p->level--;
28266
0
            return NULL;
28267
0
        }
28268
2.76k
        D(fprintf(stderr, "%*c> _loop0_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')"));
28269
2.76k
        void *_tmp_155_var;
28270
2.76k
        while (
28271
7.20k
            (_tmp_155_var = _tmp_155_rule(p))  // '.' | '...'
28272
2.76k
        )
28273
4.44k
        {
28274
4.44k
            _res = _tmp_155_var;
28275
4.44k
            if (_n == _children_capacity) {
28276
739
                _children_capacity *= 2;
28277
739
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28278
739
                if (!_new_children) {
28279
0
                    PyMem_Free(_children);
28280
0
                    p->error_indicator = 1;
28281
0
                    PyErr_NoMemory();
28282
0
                    p->level--;
28283
0
                    return NULL;
28284
0
                }
28285
739
                _children = _new_children;
28286
739
            }
28287
4.44k
            _children[_n++] = _res;
28288
4.44k
            _mark = p->mark;
28289
4.44k
        }
28290
2.76k
        p->mark = _mark;
28291
2.76k
        D(fprintf(stderr, "%*c%s _loop0_17[%d-%d]: %s failed!\n", p->level, ' ',
28292
2.76k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')"));
28293
2.76k
    }
28294
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28295
2.76k
    if (!_seq) {
28296
0
        PyMem_Free(_children);
28297
0
        p->error_indicator = 1;
28298
0
        PyErr_NoMemory();
28299
0
        p->level--;
28300
0
        return NULL;
28301
0
    }
28302
7.20k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
28303
2.76k
    PyMem_Free(_children);
28304
2.76k
    p->level--;
28305
2.76k
    return _seq;
28306
2.76k
}
28307
28308
// _loop1_18: ('.' | '...')
28309
static asdl_seq *
28310
_loop1_18_rule(Parser *p)
28311
1.15k
{
28312
1.15k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28313
0
        _Pypegen_stack_overflow(p);
28314
0
    }
28315
1.15k
    if (p->error_indicator) {
28316
0
        p->level--;
28317
0
        return NULL;
28318
0
    }
28319
1.15k
    void *_res = NULL;
28320
1.15k
    int _mark = p->mark;
28321
1.15k
    void **_children = PyMem_Malloc(sizeof(void *));
28322
1.15k
    if (!_children) {
28323
0
        p->error_indicator = 1;
28324
0
        PyErr_NoMemory();
28325
0
        p->level--;
28326
0
        return NULL;
28327
0
    }
28328
1.15k
    Py_ssize_t _children_capacity = 1;
28329
1.15k
    Py_ssize_t _n = 0;
28330
1.15k
    { // ('.' | '...')
28331
1.15k
        if (p->error_indicator) {
28332
0
            p->level--;
28333
0
            return NULL;
28334
0
        }
28335
1.15k
        D(fprintf(stderr, "%*c> _loop1_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')"));
28336
1.15k
        void *_tmp_155_var;
28337
1.15k
        while (
28338
5.13k
            (_tmp_155_var = _tmp_155_rule(p))  // '.' | '...'
28339
1.15k
        )
28340
3.98k
        {
28341
3.98k
            _res = _tmp_155_var;
28342
3.98k
            if (_n == _children_capacity) {
28343
719
                _children_capacity *= 2;
28344
719
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28345
719
                if (!_new_children) {
28346
0
                    PyMem_Free(_children);
28347
0
                    p->error_indicator = 1;
28348
0
                    PyErr_NoMemory();
28349
0
                    p->level--;
28350
0
                    return NULL;
28351
0
                }
28352
719
                _children = _new_children;
28353
719
            }
28354
3.98k
            _children[_n++] = _res;
28355
3.98k
            _mark = p->mark;
28356
3.98k
        }
28357
1.15k
        p->mark = _mark;
28358
1.15k
        D(fprintf(stderr, "%*c%s _loop1_18[%d-%d]: %s failed!\n", p->level, ' ',
28359
1.15k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')"));
28360
1.15k
    }
28361
1.15k
    if (_n == 0 || p->error_indicator) {
28362
61
        PyMem_Free(_children);
28363
61
        p->level--;
28364
61
        return NULL;
28365
61
    }
28366
1.09k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28367
1.09k
    if (!_seq) {
28368
0
        PyMem_Free(_children);
28369
0
        p->error_indicator = 1;
28370
0
        PyErr_NoMemory();
28371
0
        p->level--;
28372
0
        return NULL;
28373
0
    }
28374
5.07k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
28375
1.09k
    PyMem_Free(_children);
28376
1.09k
    p->level--;
28377
1.09k
    return _seq;
28378
1.09k
}
28379
28380
// _loop0_19: ',' import_from_as_name
28381
static asdl_seq *
28382
_loop0_19_rule(Parser *p)
28383
2.07k
{
28384
2.07k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28385
0
        _Pypegen_stack_overflow(p);
28386
0
    }
28387
2.07k
    if (p->error_indicator) {
28388
0
        p->level--;
28389
0
        return NULL;
28390
0
    }
28391
2.07k
    void *_res = NULL;
28392
2.07k
    int _mark = p->mark;
28393
2.07k
    void **_children = PyMem_Malloc(sizeof(void *));
28394
2.07k
    if (!_children) {
28395
0
        p->error_indicator = 1;
28396
0
        PyErr_NoMemory();
28397
0
        p->level--;
28398
0
        return NULL;
28399
0
    }
28400
2.07k
    Py_ssize_t _children_capacity = 1;
28401
2.07k
    Py_ssize_t _n = 0;
28402
2.07k
    { // ',' import_from_as_name
28403
2.07k
        if (p->error_indicator) {
28404
0
            p->level--;
28405
0
            return NULL;
28406
0
        }
28407
2.07k
        D(fprintf(stderr, "%*c> _loop0_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name"));
28408
2.07k
        Token * _literal;
28409
2.07k
        alias_ty elem;
28410
2.07k
        while (
28411
4.77k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
28412
4.77k
            &&
28413
4.77k
            (elem = import_from_as_name_rule(p))  // import_from_as_name
28414
2.07k
        )
28415
2.69k
        {
28416
2.69k
            _res = elem;
28417
2.69k
            if (_res == NULL && PyErr_Occurred()) {
28418
0
                p->error_indicator = 1;
28419
0
                PyMem_Free(_children);
28420
0
                p->level--;
28421
0
                return NULL;
28422
0
            }
28423
2.69k
            if (_n == _children_capacity) {
28424
476
                _children_capacity *= 2;
28425
476
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28426
476
                if (!_new_children) {
28427
0
                    PyMem_Free(_children);
28428
0
                    p->error_indicator = 1;
28429
0
                    PyErr_NoMemory();
28430
0
                    p->level--;
28431
0
                    return NULL;
28432
0
                }
28433
476
                _children = _new_children;
28434
476
            }
28435
2.69k
            _children[_n++] = _res;
28436
2.69k
            _mark = p->mark;
28437
2.69k
        }
28438
2.07k
        p->mark = _mark;
28439
2.07k
        D(fprintf(stderr, "%*c%s _loop0_19[%d-%d]: %s failed!\n", p->level, ' ',
28440
2.07k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' import_from_as_name"));
28441
2.07k
    }
28442
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28443
2.07k
    if (!_seq) {
28444
0
        PyMem_Free(_children);
28445
0
        p->error_indicator = 1;
28446
0
        PyErr_NoMemory();
28447
0
        p->level--;
28448
0
        return NULL;
28449
0
    }
28450
4.77k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
28451
2.07k
    PyMem_Free(_children);
28452
2.07k
    p->level--;
28453
2.07k
    return _seq;
28454
2.07k
}
28455
28456
// _gather_20: import_from_as_name _loop0_19
28457
static asdl_seq *
28458
_gather_20_rule(Parser *p)
28459
2.67k
{
28460
2.67k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28461
0
        _Pypegen_stack_overflow(p);
28462
0
    }
28463
2.67k
    if (p->error_indicator) {
28464
0
        p->level--;
28465
0
        return NULL;
28466
0
    }
28467
2.67k
    asdl_seq * _res = NULL;
28468
2.67k
    int _mark = p->mark;
28469
2.67k
    { // import_from_as_name _loop0_19
28470
2.67k
        if (p->error_indicator) {
28471
0
            p->level--;
28472
0
            return NULL;
28473
0
        }
28474
2.67k
        D(fprintf(stderr, "%*c> _gather_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_19"));
28475
2.67k
        alias_ty elem;
28476
2.67k
        asdl_seq * seq;
28477
2.67k
        if (
28478
2.67k
            (elem = import_from_as_name_rule(p))  // import_from_as_name
28479
2.67k
            &&
28480
2.67k
            (seq = _loop0_19_rule(p))  // _loop0_19
28481
2.67k
        )
28482
2.07k
        {
28483
2.07k
            D(fprintf(stderr, "%*c+ _gather_20[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_19"));
28484
2.07k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
28485
2.07k
            goto done;
28486
2.07k
        }
28487
601
        p->mark = _mark;
28488
601
        D(fprintf(stderr, "%*c%s _gather_20[%d-%d]: %s failed!\n", p->level, ' ',
28489
601
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_name _loop0_19"));
28490
601
    }
28491
0
    _res = NULL;
28492
2.67k
  done:
28493
2.67k
    p->level--;
28494
2.67k
    return _res;
28495
601
}
28496
28497
// _tmp_21: 'as' NAME
28498
static void *
28499
_tmp_21_rule(Parser *p)
28500
13.5k
{
28501
13.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28502
0
        _Pypegen_stack_overflow(p);
28503
0
    }
28504
13.5k
    if (p->error_indicator) {
28505
0
        p->level--;
28506
0
        return NULL;
28507
0
    }
28508
13.5k
    void * _res = NULL;
28509
13.5k
    int _mark = p->mark;
28510
13.5k
    { // 'as' NAME
28511
13.5k
        if (p->error_indicator) {
28512
0
            p->level--;
28513
0
            return NULL;
28514
0
        }
28515
13.5k
        D(fprintf(stderr, "%*c> _tmp_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
28516
13.5k
        Token * _keyword;
28517
13.5k
        expr_ty z;
28518
13.5k
        if (
28519
13.5k
            (_keyword = _PyPegen_expect_token(p, 685))  // token='as'
28520
13.5k
            &&
28521
13.5k
            (z = _PyPegen_name_token(p))  // NAME
28522
13.5k
        )
28523
1.52k
        {
28524
1.52k
            D(fprintf(stderr, "%*c+ _tmp_21[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
28525
1.52k
            _res = z;
28526
1.52k
            if (_res == NULL && PyErr_Occurred()) {
28527
0
                p->error_indicator = 1;
28528
0
                p->level--;
28529
0
                return NULL;
28530
0
            }
28531
1.52k
            goto done;
28532
1.52k
        }
28533
12.0k
        p->mark = _mark;
28534
12.0k
        D(fprintf(stderr, "%*c%s _tmp_21[%d-%d]: %s failed!\n", p->level, ' ',
28535
12.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME"));
28536
12.0k
    }
28537
0
    _res = NULL;
28538
13.5k
  done:
28539
13.5k
    p->level--;
28540
13.5k
    return _res;
28541
12.0k
}
28542
28543
// _loop0_22: ',' dotted_as_name
28544
static asdl_seq *
28545
_loop0_22_rule(Parser *p)
28546
2.15k
{
28547
2.15k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28548
0
        _Pypegen_stack_overflow(p);
28549
0
    }
28550
2.15k
    if (p->error_indicator) {
28551
0
        p->level--;
28552
0
        return NULL;
28553
0
    }
28554
2.15k
    void *_res = NULL;
28555
2.15k
    int _mark = p->mark;
28556
2.15k
    void **_children = PyMem_Malloc(sizeof(void *));
28557
2.15k
    if (!_children) {
28558
0
        p->error_indicator = 1;
28559
0
        PyErr_NoMemory();
28560
0
        p->level--;
28561
0
        return NULL;
28562
0
    }
28563
2.15k
    Py_ssize_t _children_capacity = 1;
28564
2.15k
    Py_ssize_t _n = 0;
28565
2.15k
    { // ',' dotted_as_name
28566
2.15k
        if (p->error_indicator) {
28567
0
            p->level--;
28568
0
            return NULL;
28569
0
        }
28570
2.15k
        D(fprintf(stderr, "%*c> _loop0_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name"));
28571
2.15k
        Token * _literal;
28572
2.15k
        alias_ty elem;
28573
2.15k
        while (
28574
6.63k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
28575
6.63k
            &&
28576
6.63k
            (elem = dotted_as_name_rule(p))  // dotted_as_name
28577
2.15k
        )
28578
4.48k
        {
28579
4.48k
            _res = elem;
28580
4.48k
            if (_res == NULL && PyErr_Occurred()) {
28581
0
                p->error_indicator = 1;
28582
0
                PyMem_Free(_children);
28583
0
                p->level--;
28584
0
                return NULL;
28585
0
            }
28586
4.48k
            if (_n == _children_capacity) {
28587
1.06k
                _children_capacity *= 2;
28588
1.06k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28589
1.06k
                if (!_new_children) {
28590
0
                    PyMem_Free(_children);
28591
0
                    p->error_indicator = 1;
28592
0
                    PyErr_NoMemory();
28593
0
                    p->level--;
28594
0
                    return NULL;
28595
0
                }
28596
1.06k
                _children = _new_children;
28597
1.06k
            }
28598
4.48k
            _children[_n++] = _res;
28599
4.48k
            _mark = p->mark;
28600
4.48k
        }
28601
2.15k
        p->mark = _mark;
28602
2.15k
        D(fprintf(stderr, "%*c%s _loop0_22[%d-%d]: %s failed!\n", p->level, ' ',
28603
2.15k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_as_name"));
28604
2.15k
    }
28605
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28606
2.15k
    if (!_seq) {
28607
0
        PyMem_Free(_children);
28608
0
        p->error_indicator = 1;
28609
0
        PyErr_NoMemory();
28610
0
        p->level--;
28611
0
        return NULL;
28612
0
    }
28613
6.63k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
28614
2.15k
    PyMem_Free(_children);
28615
2.15k
    p->level--;
28616
2.15k
    return _seq;
28617
2.15k
}
28618
28619
// _gather_23: dotted_as_name _loop0_22
28620
static asdl_seq *
28621
_gather_23_rule(Parser *p)
28622
2.18k
{
28623
2.18k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28624
0
        _Pypegen_stack_overflow(p);
28625
0
    }
28626
2.18k
    if (p->error_indicator) {
28627
0
        p->level--;
28628
0
        return NULL;
28629
0
    }
28630
2.18k
    asdl_seq * _res = NULL;
28631
2.18k
    int _mark = p->mark;
28632
2.18k
    { // dotted_as_name _loop0_22
28633
2.18k
        if (p->error_indicator) {
28634
0
            p->level--;
28635
0
            return NULL;
28636
0
        }
28637
2.18k
        D(fprintf(stderr, "%*c> _gather_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_22"));
28638
2.18k
        alias_ty elem;
28639
2.18k
        asdl_seq * seq;
28640
2.18k
        if (
28641
2.18k
            (elem = dotted_as_name_rule(p))  // dotted_as_name
28642
2.18k
            &&
28643
2.18k
            (seq = _loop0_22_rule(p))  // _loop0_22
28644
2.18k
        )
28645
2.15k
        {
28646
2.15k
            D(fprintf(stderr, "%*c+ _gather_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_22"));
28647
2.15k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
28648
2.15k
            goto done;
28649
2.15k
        }
28650
33
        p->mark = _mark;
28651
33
        D(fprintf(stderr, "%*c%s _gather_23[%d-%d]: %s failed!\n", p->level, ' ',
28652
33
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_as_name _loop0_22"));
28653
33
    }
28654
0
    _res = NULL;
28655
2.18k
  done:
28656
2.18k
    p->level--;
28657
2.18k
    return _res;
28658
33
}
28659
28660
// _loop1_24: ('@' named_expression NEWLINE)
28661
static asdl_seq *
28662
_loop1_24_rule(Parser *p)
28663
16.5k
{
28664
16.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28665
0
        _Pypegen_stack_overflow(p);
28666
0
    }
28667
16.5k
    if (p->error_indicator) {
28668
0
        p->level--;
28669
0
        return NULL;
28670
0
    }
28671
16.5k
    void *_res = NULL;
28672
16.5k
    int _mark = p->mark;
28673
16.5k
    void **_children = PyMem_Malloc(sizeof(void *));
28674
16.5k
    if (!_children) {
28675
0
        p->error_indicator = 1;
28676
0
        PyErr_NoMemory();
28677
0
        p->level--;
28678
0
        return NULL;
28679
0
    }
28680
16.5k
    Py_ssize_t _children_capacity = 1;
28681
16.5k
    Py_ssize_t _n = 0;
28682
16.5k
    { // ('@' named_expression NEWLINE)
28683
16.5k
        if (p->error_indicator) {
28684
0
            p->level--;
28685
0
            return NULL;
28686
0
        }
28687
16.5k
        D(fprintf(stderr, "%*c> _loop1_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)"));
28688
16.5k
        void *_tmp_156_var;
28689
16.5k
        while (
28690
21.1k
            (_tmp_156_var = _tmp_156_rule(p))  // '@' named_expression NEWLINE
28691
16.5k
        )
28692
4.56k
        {
28693
4.56k
            _res = _tmp_156_var;
28694
4.56k
            if (_n == _children_capacity) {
28695
864
                _children_capacity *= 2;
28696
864
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28697
864
                if (!_new_children) {
28698
0
                    PyMem_Free(_children);
28699
0
                    p->error_indicator = 1;
28700
0
                    PyErr_NoMemory();
28701
0
                    p->level--;
28702
0
                    return NULL;
28703
0
                }
28704
864
                _children = _new_children;
28705
864
            }
28706
4.56k
            _children[_n++] = _res;
28707
4.56k
            _mark = p->mark;
28708
4.56k
        }
28709
16.5k
        p->mark = _mark;
28710
16.5k
        D(fprintf(stderr, "%*c%s _loop1_24[%d-%d]: %s failed!\n", p->level, ' ',
28711
16.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('@' named_expression NEWLINE)"));
28712
16.5k
    }
28713
16.5k
    if (_n == 0 || p->error_indicator) {
28714
14.1k
        PyMem_Free(_children);
28715
14.1k
        p->level--;
28716
14.1k
        return NULL;
28717
14.1k
    }
28718
2.43k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28719
2.43k
    if (!_seq) {
28720
0
        PyMem_Free(_children);
28721
0
        p->error_indicator = 1;
28722
0
        PyErr_NoMemory();
28723
0
        p->level--;
28724
0
        return NULL;
28725
0
    }
28726
6.99k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
28727
2.43k
    PyMem_Free(_children);
28728
2.43k
    p->level--;
28729
2.43k
    return _seq;
28730
2.43k
}
28731
28732
// _tmp_25: '(' arguments? ')'
28733
static void *
28734
_tmp_25_rule(Parser *p)
28735
5.33k
{
28736
5.33k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28737
0
        _Pypegen_stack_overflow(p);
28738
0
    }
28739
5.33k
    if (p->error_indicator) {
28740
0
        p->level--;
28741
0
        return NULL;
28742
0
    }
28743
5.33k
    void * _res = NULL;
28744
5.33k
    int _mark = p->mark;
28745
5.33k
    { // '(' arguments? ')'
28746
5.33k
        if (p->error_indicator) {
28747
0
            p->level--;
28748
0
            return NULL;
28749
0
        }
28750
5.33k
        D(fprintf(stderr, "%*c> _tmp_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'"));
28751
5.33k
        Token * _literal;
28752
5.33k
        Token * _literal_1;
28753
5.33k
        void *z;
28754
5.33k
        if (
28755
5.33k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
28756
5.33k
            &&
28757
5.33k
            (z = arguments_rule(p), !p->error_indicator)  // arguments?
28758
5.33k
            &&
28759
5.33k
            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
28760
5.33k
        )
28761
2.02k
        {
28762
2.02k
            D(fprintf(stderr, "%*c+ _tmp_25[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'"));
28763
2.02k
            _res = z;
28764
2.02k
            if (_res == NULL && PyErr_Occurred()) {
28765
0
                p->error_indicator = 1;
28766
0
                p->level--;
28767
0
                return NULL;
28768
0
            }
28769
2.02k
            goto done;
28770
2.02k
        }
28771
3.30k
        p->mark = _mark;
28772
3.30k
        D(fprintf(stderr, "%*c%s _tmp_25[%d-%d]: %s failed!\n", p->level, ' ',
28773
3.30k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'"));
28774
3.30k
    }
28775
0
    _res = NULL;
28776
5.33k
  done:
28777
5.33k
    p->level--;
28778
5.33k
    return _res;
28779
3.30k
}
28780
28781
// _tmp_26: '->' expression
28782
static void *
28783
_tmp_26_rule(Parser *p)
28784
12.0k
{
28785
12.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28786
0
        _Pypegen_stack_overflow(p);
28787
0
    }
28788
12.0k
    if (p->error_indicator) {
28789
0
        p->level--;
28790
0
        return NULL;
28791
0
    }
28792
12.0k
    void * _res = NULL;
28793
12.0k
    int _mark = p->mark;
28794
12.0k
    { // '->' expression
28795
12.0k
        if (p->error_indicator) {
28796
0
            p->level--;
28797
0
            return NULL;
28798
0
        }
28799
12.0k
        D(fprintf(stderr, "%*c> _tmp_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression"));
28800
12.0k
        Token * _literal;
28801
12.0k
        expr_ty z;
28802
12.0k
        if (
28803
12.0k
            (_literal = _PyPegen_expect_token(p, 51))  // token='->'
28804
12.0k
            &&
28805
12.0k
            (z = expression_rule(p))  // expression
28806
12.0k
        )
28807
409
        {
28808
409
            D(fprintf(stderr, "%*c+ _tmp_26[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression"));
28809
409
            _res = z;
28810
409
            if (_res == NULL && PyErr_Occurred()) {
28811
0
                p->error_indicator = 1;
28812
0
                p->level--;
28813
0
                return NULL;
28814
0
            }
28815
409
            goto done;
28816
409
        }
28817
11.6k
        p->mark = _mark;
28818
11.6k
        D(fprintf(stderr, "%*c%s _tmp_26[%d-%d]: %s failed!\n", p->level, ' ',
28819
11.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression"));
28820
11.6k
    }
28821
0
    _res = NULL;
28822
12.0k
  done:
28823
12.0k
    p->level--;
28824
12.0k
    return _res;
28825
11.6k
}
28826
28827
// _loop0_27: param_no_default
28828
static asdl_seq *
28829
_loop0_27_rule(Parser *p)
28830
57.2k
{
28831
57.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28832
0
        _Pypegen_stack_overflow(p);
28833
0
    }
28834
57.2k
    if (p->error_indicator) {
28835
0
        p->level--;
28836
0
        return NULL;
28837
0
    }
28838
57.2k
    void *_res = NULL;
28839
57.2k
    int _mark = p->mark;
28840
57.2k
    void **_children = PyMem_Malloc(sizeof(void *));
28841
57.2k
    if (!_children) {
28842
0
        p->error_indicator = 1;
28843
0
        PyErr_NoMemory();
28844
0
        p->level--;
28845
0
        return NULL;
28846
0
    }
28847
57.2k
    Py_ssize_t _children_capacity = 1;
28848
57.2k
    Py_ssize_t _n = 0;
28849
57.2k
    { // param_no_default
28850
57.2k
        if (p->error_indicator) {
28851
0
            p->level--;
28852
0
            return NULL;
28853
0
        }
28854
57.2k
        D(fprintf(stderr, "%*c> _loop0_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
28855
57.2k
        arg_ty param_no_default_var;
28856
57.2k
        while (
28857
85.0k
            (param_no_default_var = param_no_default_rule(p))  // param_no_default
28858
57.2k
        )
28859
27.8k
        {
28860
27.8k
            _res = param_no_default_var;
28861
27.8k
            if (_n == _children_capacity) {
28862
7.12k
                _children_capacity *= 2;
28863
7.12k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28864
7.12k
                if (!_new_children) {
28865
0
                    PyMem_Free(_children);
28866
0
                    p->error_indicator = 1;
28867
0
                    PyErr_NoMemory();
28868
0
                    p->level--;
28869
0
                    return NULL;
28870
0
                }
28871
7.12k
                _children = _new_children;
28872
7.12k
            }
28873
27.8k
            _children[_n++] = _res;
28874
27.8k
            _mark = p->mark;
28875
27.8k
        }
28876
57.2k
        p->mark = _mark;
28877
57.2k
        D(fprintf(stderr, "%*c%s _loop0_27[%d-%d]: %s failed!\n", p->level, ' ',
28878
57.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
28879
57.2k
    }
28880
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28881
57.2k
    if (!_seq) {
28882
0
        PyMem_Free(_children);
28883
0
        p->error_indicator = 1;
28884
0
        PyErr_NoMemory();
28885
0
        p->level--;
28886
0
        return NULL;
28887
0
    }
28888
85.0k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
28889
57.2k
    PyMem_Free(_children);
28890
57.2k
    p->level--;
28891
57.2k
    return _seq;
28892
57.2k
}
28893
28894
// _loop0_28: param_with_default
28895
static asdl_seq *
28896
_loop0_28_rule(Parser *p)
28897
7.44k
{
28898
7.44k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28899
0
        _Pypegen_stack_overflow(p);
28900
0
    }
28901
7.44k
    if (p->error_indicator) {
28902
2
        p->level--;
28903
2
        return NULL;
28904
2
    }
28905
7.43k
    void *_res = NULL;
28906
7.43k
    int _mark = p->mark;
28907
7.43k
    void **_children = PyMem_Malloc(sizeof(void *));
28908
7.43k
    if (!_children) {
28909
0
        p->error_indicator = 1;
28910
0
        PyErr_NoMemory();
28911
0
        p->level--;
28912
0
        return NULL;
28913
0
    }
28914
7.43k
    Py_ssize_t _children_capacity = 1;
28915
7.43k
    Py_ssize_t _n = 0;
28916
7.43k
    { // param_with_default
28917
7.43k
        if (p->error_indicator) {
28918
0
            p->level--;
28919
0
            return NULL;
28920
0
        }
28921
7.43k
        D(fprintf(stderr, "%*c> _loop0_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
28922
7.43k
        NameDefaultPair* param_with_default_var;
28923
7.43k
        while (
28924
9.80k
            (param_with_default_var = param_with_default_rule(p))  // param_with_default
28925
7.43k
        )
28926
2.36k
        {
28927
2.36k
            _res = param_with_default_var;
28928
2.36k
            if (_n == _children_capacity) {
28929
465
                _children_capacity *= 2;
28930
465
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28931
465
                if (!_new_children) {
28932
0
                    PyMem_Free(_children);
28933
0
                    p->error_indicator = 1;
28934
0
                    PyErr_NoMemory();
28935
0
                    p->level--;
28936
0
                    return NULL;
28937
0
                }
28938
465
                _children = _new_children;
28939
465
            }
28940
2.36k
            _children[_n++] = _res;
28941
2.36k
            _mark = p->mark;
28942
2.36k
        }
28943
7.43k
        p->mark = _mark;
28944
7.43k
        D(fprintf(stderr, "%*c%s _loop0_28[%d-%d]: %s failed!\n", p->level, ' ',
28945
7.43k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
28946
7.43k
    }
28947
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28948
7.43k
    if (!_seq) {
28949
0
        PyMem_Free(_children);
28950
0
        p->error_indicator = 1;
28951
0
        PyErr_NoMemory();
28952
0
        p->level--;
28953
0
        return NULL;
28954
0
    }
28955
9.80k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
28956
7.43k
    PyMem_Free(_children);
28957
7.43k
    p->level--;
28958
7.43k
    return _seq;
28959
7.43k
}
28960
28961
// _loop1_29: param_no_default
28962
static asdl_seq *
28963
_loop1_29_rule(Parser *p)
28964
61.9k
{
28965
61.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
28966
0
        _Pypegen_stack_overflow(p);
28967
0
    }
28968
61.9k
    if (p->error_indicator) {
28969
0
        p->level--;
28970
0
        return NULL;
28971
0
    }
28972
61.9k
    void *_res = NULL;
28973
61.9k
    int _mark = p->mark;
28974
61.9k
    void **_children = PyMem_Malloc(sizeof(void *));
28975
61.9k
    if (!_children) {
28976
0
        p->error_indicator = 1;
28977
0
        PyErr_NoMemory();
28978
0
        p->level--;
28979
0
        return NULL;
28980
0
    }
28981
61.9k
    Py_ssize_t _children_capacity = 1;
28982
61.9k
    Py_ssize_t _n = 0;
28983
61.9k
    { // param_no_default
28984
61.9k
        if (p->error_indicator) {
28985
0
            p->level--;
28986
0
            return NULL;
28987
0
        }
28988
61.9k
        D(fprintf(stderr, "%*c> _loop1_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
28989
61.9k
        arg_ty param_no_default_var;
28990
61.9k
        while (
28991
102k
            (param_no_default_var = param_no_default_rule(p))  // param_no_default
28992
61.9k
        )
28993
40.5k
        {
28994
40.5k
            _res = param_no_default_var;
28995
40.5k
            if (_n == _children_capacity) {
28996
10.0k
                _children_capacity *= 2;
28997
10.0k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28998
10.0k
                if (!_new_children) {
28999
0
                    PyMem_Free(_children);
29000
0
                    p->error_indicator = 1;
29001
0
                    PyErr_NoMemory();
29002
0
                    p->level--;
29003
0
                    return NULL;
29004
0
                }
29005
10.0k
                _children = _new_children;
29006
10.0k
            }
29007
40.5k
            _children[_n++] = _res;
29008
40.5k
            _mark = p->mark;
29009
40.5k
        }
29010
61.9k
        p->mark = _mark;
29011
61.9k
        D(fprintf(stderr, "%*c%s _loop1_29[%d-%d]: %s failed!\n", p->level, ' ',
29012
61.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
29013
61.9k
    }
29014
61.9k
    if (_n == 0 || p->error_indicator) {
29015
35.5k
        PyMem_Free(_children);
29016
35.5k
        p->level--;
29017
35.5k
        return NULL;
29018
35.5k
    }
29019
26.3k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29020
26.3k
    if (!_seq) {
29021
0
        PyMem_Free(_children);
29022
0
        p->error_indicator = 1;
29023
0
        PyErr_NoMemory();
29024
0
        p->level--;
29025
0
        return NULL;
29026
0
    }
29027
66.8k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
29028
26.3k
    PyMem_Free(_children);
29029
26.3k
    p->level--;
29030
26.3k
    return _seq;
29031
26.3k
}
29032
29033
// _loop1_30: param_with_default
29034
static asdl_seq *
29035
_loop1_30_rule(Parser *p)
29036
56.9k
{
29037
56.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29038
0
        _Pypegen_stack_overflow(p);
29039
0
    }
29040
56.9k
    if (p->error_indicator) {
29041
0
        p->level--;
29042
0
        return NULL;
29043
0
    }
29044
56.9k
    void *_res = NULL;
29045
56.9k
    int _mark = p->mark;
29046
56.9k
    void **_children = PyMem_Malloc(sizeof(void *));
29047
56.9k
    if (!_children) {
29048
0
        p->error_indicator = 1;
29049
0
        PyErr_NoMemory();
29050
0
        p->level--;
29051
0
        return NULL;
29052
0
    }
29053
56.9k
    Py_ssize_t _children_capacity = 1;
29054
56.9k
    Py_ssize_t _n = 0;
29055
56.9k
    { // param_with_default
29056
56.9k
        if (p->error_indicator) {
29057
0
            p->level--;
29058
0
            return NULL;
29059
0
        }
29060
56.9k
        D(fprintf(stderr, "%*c> _loop1_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
29061
56.9k
        NameDefaultPair* param_with_default_var;
29062
56.9k
        while (
29063
77.9k
            (param_with_default_var = param_with_default_rule(p))  // param_with_default
29064
56.9k
        )
29065
20.9k
        {
29066
20.9k
            _res = param_with_default_var;
29067
20.9k
            if (_n == _children_capacity) {
29068
2.14k
                _children_capacity *= 2;
29069
2.14k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29070
2.14k
                if (!_new_children) {
29071
0
                    PyMem_Free(_children);
29072
0
                    p->error_indicator = 1;
29073
0
                    PyErr_NoMemory();
29074
0
                    p->level--;
29075
0
                    return NULL;
29076
0
                }
29077
2.14k
                _children = _new_children;
29078
2.14k
            }
29079
20.9k
            _children[_n++] = _res;
29080
20.9k
            _mark = p->mark;
29081
20.9k
        }
29082
56.9k
        p->mark = _mark;
29083
56.9k
        D(fprintf(stderr, "%*c%s _loop1_30[%d-%d]: %s failed!\n", p->level, ' ',
29084
56.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
29085
56.9k
    }
29086
56.9k
    if (_n == 0 || p->error_indicator) {
29087
43.9k
        PyMem_Free(_children);
29088
43.9k
        p->level--;
29089
43.9k
        return NULL;
29090
43.9k
    }
29091
13.0k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29092
13.0k
    if (!_seq) {
29093
0
        PyMem_Free(_children);
29094
0
        p->error_indicator = 1;
29095
0
        PyErr_NoMemory();
29096
0
        p->level--;
29097
0
        return NULL;
29098
0
    }
29099
34.0k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
29100
13.0k
    PyMem_Free(_children);
29101
13.0k
    p->level--;
29102
13.0k
    return _seq;
29103
13.0k
}
29104
29105
// _loop0_31: param_maybe_default
29106
static asdl_seq *
29107
_loop0_31_rule(Parser *p)
29108
8.65k
{
29109
8.65k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29110
0
        _Pypegen_stack_overflow(p);
29111
0
    }
29112
8.65k
    if (p->error_indicator) {
29113
0
        p->level--;
29114
0
        return NULL;
29115
0
    }
29116
8.65k
    void *_res = NULL;
29117
8.65k
    int _mark = p->mark;
29118
8.65k
    void **_children = PyMem_Malloc(sizeof(void *));
29119
8.65k
    if (!_children) {
29120
0
        p->error_indicator = 1;
29121
0
        PyErr_NoMemory();
29122
0
        p->level--;
29123
0
        return NULL;
29124
0
    }
29125
8.65k
    Py_ssize_t _children_capacity = 1;
29126
8.65k
    Py_ssize_t _n = 0;
29127
8.65k
    { // param_maybe_default
29128
8.65k
        if (p->error_indicator) {
29129
0
            p->level--;
29130
0
            return NULL;
29131
0
        }
29132
8.65k
        D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default"));
29133
8.65k
        NameDefaultPair* param_maybe_default_var;
29134
8.65k
        while (
29135
14.9k
            (param_maybe_default_var = param_maybe_default_rule(p))  // param_maybe_default
29136
8.65k
        )
29137
6.25k
        {
29138
6.25k
            _res = param_maybe_default_var;
29139
6.25k
            if (_n == _children_capacity) {
29140
1.53k
                _children_capacity *= 2;
29141
1.53k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29142
1.53k
                if (!_new_children) {
29143
0
                    PyMem_Free(_children);
29144
0
                    p->error_indicator = 1;
29145
0
                    PyErr_NoMemory();
29146
0
                    p->level--;
29147
0
                    return NULL;
29148
0
                }
29149
1.53k
                _children = _new_children;
29150
1.53k
            }
29151
6.25k
            _children[_n++] = _res;
29152
6.25k
            _mark = p->mark;
29153
6.25k
        }
29154
8.65k
        p->mark = _mark;
29155
8.65k
        D(fprintf(stderr, "%*c%s _loop0_31[%d-%d]: %s failed!\n", p->level, ' ',
29156
8.65k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default"));
29157
8.65k
    }
29158
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29159
8.65k
    if (!_seq) {
29160
0
        PyMem_Free(_children);
29161
0
        p->error_indicator = 1;
29162
0
        PyErr_NoMemory();
29163
0
        p->level--;
29164
0
        return NULL;
29165
0
    }
29166
14.9k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
29167
8.65k
    PyMem_Free(_children);
29168
8.65k
    p->level--;
29169
8.65k
    return _seq;
29170
8.65k
}
29171
29172
// _loop1_32: param_maybe_default
29173
static asdl_seq *
29174
_loop1_32_rule(Parser *p)
29175
5.40k
{
29176
5.40k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29177
0
        _Pypegen_stack_overflow(p);
29178
0
    }
29179
5.40k
    if (p->error_indicator) {
29180
0
        p->level--;
29181
0
        return NULL;
29182
0
    }
29183
5.40k
    void *_res = NULL;
29184
5.40k
    int _mark = p->mark;
29185
5.40k
    void **_children = PyMem_Malloc(sizeof(void *));
29186
5.40k
    if (!_children) {
29187
0
        p->error_indicator = 1;
29188
0
        PyErr_NoMemory();
29189
0
        p->level--;
29190
0
        return NULL;
29191
0
    }
29192
5.40k
    Py_ssize_t _children_capacity = 1;
29193
5.40k
    Py_ssize_t _n = 0;
29194
5.40k
    { // param_maybe_default
29195
5.40k
        if (p->error_indicator) {
29196
0
            p->level--;
29197
0
            return NULL;
29198
0
        }
29199
5.40k
        D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default"));
29200
5.40k
        NameDefaultPair* param_maybe_default_var;
29201
5.40k
        while (
29202
10.3k
            (param_maybe_default_var = param_maybe_default_rule(p))  // param_maybe_default
29203
5.40k
        )
29204
4.96k
        {
29205
4.96k
            _res = param_maybe_default_var;
29206
4.96k
            if (_n == _children_capacity) {
29207
669
                _children_capacity *= 2;
29208
669
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29209
669
                if (!_new_children) {
29210
0
                    PyMem_Free(_children);
29211
0
                    p->error_indicator = 1;
29212
0
                    PyErr_NoMemory();
29213
0
                    p->level--;
29214
0
                    return NULL;
29215
0
                }
29216
669
                _children = _new_children;
29217
669
            }
29218
4.96k
            _children[_n++] = _res;
29219
4.96k
            _mark = p->mark;
29220
4.96k
        }
29221
5.40k
        p->mark = _mark;
29222
5.40k
        D(fprintf(stderr, "%*c%s _loop1_32[%d-%d]: %s failed!\n", p->level, ' ',
29223
5.40k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default"));
29224
5.40k
    }
29225
5.40k
    if (_n == 0 || p->error_indicator) {
29226
2.29k
        PyMem_Free(_children);
29227
2.29k
        p->level--;
29228
2.29k
        return NULL;
29229
2.29k
    }
29230
3.10k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29231
3.10k
    if (!_seq) {
29232
0
        PyMem_Free(_children);
29233
0
        p->error_indicator = 1;
29234
0
        PyErr_NoMemory();
29235
0
        p->level--;
29236
0
        return NULL;
29237
0
    }
29238
8.06k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
29239
3.10k
    PyMem_Free(_children);
29240
3.10k
    p->level--;
29241
3.10k
    return _seq;
29242
3.10k
}
29243
29244
// _loop0_33: ',' with_item
29245
static asdl_seq *
29246
_loop0_33_rule(Parser *p)
29247
5.00k
{
29248
5.00k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29249
0
        _Pypegen_stack_overflow(p);
29250
0
    }
29251
5.00k
    if (p->error_indicator) {
29252
0
        p->level--;
29253
0
        return NULL;
29254
0
    }
29255
5.00k
    void *_res = NULL;
29256
5.00k
    int _mark = p->mark;
29257
5.00k
    void **_children = PyMem_Malloc(sizeof(void *));
29258
5.00k
    if (!_children) {
29259
0
        p->error_indicator = 1;
29260
0
        PyErr_NoMemory();
29261
0
        p->level--;
29262
0
        return NULL;
29263
0
    }
29264
5.00k
    Py_ssize_t _children_capacity = 1;
29265
5.00k
    Py_ssize_t _n = 0;
29266
5.00k
    { // ',' with_item
29267
5.00k
        if (p->error_indicator) {
29268
0
            p->level--;
29269
0
            return NULL;
29270
0
        }
29271
5.00k
        D(fprintf(stderr, "%*c> _loop0_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
29272
5.00k
        Token * _literal;
29273
5.00k
        withitem_ty elem;
29274
5.00k
        while (
29275
11.3k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
29276
11.3k
            &&
29277
11.3k
            (elem = with_item_rule(p))  // with_item
29278
5.00k
        )
29279
6.36k
        {
29280
6.36k
            _res = elem;
29281
6.36k
            if (_res == NULL && PyErr_Occurred()) {
29282
0
                p->error_indicator = 1;
29283
0
                PyMem_Free(_children);
29284
0
                p->level--;
29285
0
                return NULL;
29286
0
            }
29287
6.36k
            if (_n == _children_capacity) {
29288
2.22k
                _children_capacity *= 2;
29289
2.22k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29290
2.22k
                if (!_new_children) {
29291
0
                    PyMem_Free(_children);
29292
0
                    p->error_indicator = 1;
29293
0
                    PyErr_NoMemory();
29294
0
                    p->level--;
29295
0
                    return NULL;
29296
0
                }
29297
2.22k
                _children = _new_children;
29298
2.22k
            }
29299
6.36k
            _children[_n++] = _res;
29300
6.36k
            _mark = p->mark;
29301
6.36k
        }
29302
5.00k
        p->mark = _mark;
29303
5.00k
        D(fprintf(stderr, "%*c%s _loop0_33[%d-%d]: %s failed!\n", p->level, ' ',
29304
5.00k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item"));
29305
5.00k
    }
29306
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29307
5.00k
    if (!_seq) {
29308
0
        PyMem_Free(_children);
29309
0
        p->error_indicator = 1;
29310
0
        PyErr_NoMemory();
29311
0
        p->level--;
29312
0
        return NULL;
29313
0
    }
29314
11.3k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
29315
5.00k
    PyMem_Free(_children);
29316
5.00k
    p->level--;
29317
5.00k
    return _seq;
29318
5.00k
}
29319
29320
// _gather_34: with_item _loop0_33
29321
static asdl_seq *
29322
_gather_34_rule(Parser *p)
29323
6.12k
{
29324
6.12k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29325
0
        _Pypegen_stack_overflow(p);
29326
0
    }
29327
6.12k
    if (p->error_indicator) {
29328
0
        p->level--;
29329
0
        return NULL;
29330
0
    }
29331
6.12k
    asdl_seq * _res = NULL;
29332
6.12k
    int _mark = p->mark;
29333
6.12k
    { // with_item _loop0_33
29334
6.12k
        if (p->error_indicator) {
29335
0
            p->level--;
29336
0
            return NULL;
29337
0
        }
29338
6.12k
        D(fprintf(stderr, "%*c> _gather_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_33"));
29339
6.12k
        withitem_ty elem;
29340
6.12k
        asdl_seq * seq;
29341
6.12k
        if (
29342
6.12k
            (elem = with_item_rule(p))  // with_item
29343
6.12k
            &&
29344
6.12k
            (seq = _loop0_33_rule(p))  // _loop0_33
29345
6.12k
        )
29346
5.00k
        {
29347
5.00k
            D(fprintf(stderr, "%*c+ _gather_34[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_33"));
29348
5.00k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
29349
5.00k
            goto done;
29350
5.00k
        }
29351
1.11k
        p->mark = _mark;
29352
1.11k
        D(fprintf(stderr, "%*c%s _gather_34[%d-%d]: %s failed!\n", p->level, ' ',
29353
1.11k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_33"));
29354
1.11k
    }
29355
0
    _res = NULL;
29356
6.12k
  done:
29357
6.12k
    p->level--;
29358
6.12k
    return _res;
29359
1.11k
}
29360
29361
// _tmp_35: ',' | ')' | ':'
29362
static void *
29363
_tmp_35_rule(Parser *p)
29364
1.59k
{
29365
1.59k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29366
0
        _Pypegen_stack_overflow(p);
29367
0
    }
29368
1.59k
    if (p->error_indicator) {
29369
0
        p->level--;
29370
0
        return NULL;
29371
0
    }
29372
1.59k
    void * _res = NULL;
29373
1.59k
    int _mark = p->mark;
29374
1.59k
    { // ','
29375
1.59k
        if (p->error_indicator) {
29376
0
            p->level--;
29377
0
            return NULL;
29378
0
        }
29379
1.59k
        D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
29380
1.59k
        Token * _literal;
29381
1.59k
        if (
29382
1.59k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
29383
1.59k
        )
29384
970
        {
29385
970
            D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
29386
970
            _res = _literal;
29387
970
            goto done;
29388
970
        }
29389
624
        p->mark = _mark;
29390
624
        D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ',
29391
624
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
29392
624
    }
29393
0
    { // ')'
29394
624
        if (p->error_indicator) {
29395
0
            p->level--;
29396
0
            return NULL;
29397
0
        }
29398
624
        D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
29399
624
        Token * _literal;
29400
624
        if (
29401
624
            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
29402
624
        )
29403
393
        {
29404
393
            D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
29405
393
            _res = _literal;
29406
393
            goto done;
29407
393
        }
29408
231
        p->mark = _mark;
29409
231
        D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ',
29410
231
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
29411
231
    }
29412
0
    { // ':'
29413
231
        if (p->error_indicator) {
29414
0
            p->level--;
29415
0
            return NULL;
29416
0
        }
29417
231
        D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
29418
231
        Token * _literal;
29419
231
        if (
29420
231
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
29421
231
        )
29422
219
        {
29423
219
            D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
29424
219
            _res = _literal;
29425
219
            goto done;
29426
219
        }
29427
12
        p->mark = _mark;
29428
12
        D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ',
29429
12
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
29430
12
    }
29431
0
    _res = NULL;
29432
1.59k
  done:
29433
1.59k
    p->level--;
29434
1.59k
    return _res;
29435
12
}
29436
29437
// _loop1_36: except_block
29438
static asdl_seq *
29439
_loop1_36_rule(Parser *p)
29440
5.65k
{
29441
5.65k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29442
0
        _Pypegen_stack_overflow(p);
29443
0
    }
29444
5.65k
    if (p->error_indicator) {
29445
0
        p->level--;
29446
0
        return NULL;
29447
0
    }
29448
5.65k
    void *_res = NULL;
29449
5.65k
    int _mark = p->mark;
29450
5.65k
    void **_children = PyMem_Malloc(sizeof(void *));
29451
5.65k
    if (!_children) {
29452
0
        p->error_indicator = 1;
29453
0
        PyErr_NoMemory();
29454
0
        p->level--;
29455
0
        return NULL;
29456
0
    }
29457
5.65k
    Py_ssize_t _children_capacity = 1;
29458
5.65k
    Py_ssize_t _n = 0;
29459
5.65k
    { // except_block
29460
5.65k
        if (p->error_indicator) {
29461
0
            p->level--;
29462
0
            return NULL;
29463
0
        }
29464
5.65k
        D(fprintf(stderr, "%*c> _loop1_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block"));
29465
5.65k
        excepthandler_ty except_block_var;
29466
5.65k
        while (
29467
11.0k
            (except_block_var = except_block_rule(p))  // except_block
29468
5.65k
        )
29469
5.34k
        {
29470
5.34k
            _res = except_block_var;
29471
5.34k
            if (_n == _children_capacity) {
29472
1.01k
                _children_capacity *= 2;
29473
1.01k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29474
1.01k
                if (!_new_children) {
29475
0
                    PyMem_Free(_children);
29476
0
                    p->error_indicator = 1;
29477
0
                    PyErr_NoMemory();
29478
0
                    p->level--;
29479
0
                    return NULL;
29480
0
                }
29481
1.01k
                _children = _new_children;
29482
1.01k
            }
29483
5.34k
            _children[_n++] = _res;
29484
5.34k
            _mark = p->mark;
29485
5.34k
        }
29486
5.65k
        p->mark = _mark;
29487
5.65k
        D(fprintf(stderr, "%*c%s _loop1_36[%d-%d]: %s failed!\n", p->level, ' ',
29488
5.65k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_block"));
29489
5.65k
    }
29490
5.65k
    if (_n == 0 || p->error_indicator) {
29491
2.15k
        PyMem_Free(_children);
29492
2.15k
        p->level--;
29493
2.15k
        return NULL;
29494
2.15k
    }
29495
3.50k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29496
3.50k
    if (!_seq) {
29497
0
        PyMem_Free(_children);
29498
0
        p->error_indicator = 1;
29499
0
        PyErr_NoMemory();
29500
0
        p->level--;
29501
0
        return NULL;
29502
0
    }
29503
8.83k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
29504
3.50k
    PyMem_Free(_children);
29505
3.50k
    p->level--;
29506
3.50k
    return _seq;
29507
3.50k
}
29508
29509
// _loop1_37: except_star_block
29510
static asdl_seq *
29511
_loop1_37_rule(Parser *p)
29512
2.94k
{
29513
2.94k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29514
0
        _Pypegen_stack_overflow(p);
29515
0
    }
29516
2.94k
    if (p->error_indicator) {
29517
0
        p->level--;
29518
0
        return NULL;
29519
0
    }
29520
2.94k
    void *_res = NULL;
29521
2.94k
    int _mark = p->mark;
29522
2.94k
    void **_children = PyMem_Malloc(sizeof(void *));
29523
2.94k
    if (!_children) {
29524
0
        p->error_indicator = 1;
29525
0
        PyErr_NoMemory();
29526
0
        p->level--;
29527
0
        return NULL;
29528
0
    }
29529
2.94k
    Py_ssize_t _children_capacity = 1;
29530
2.94k
    Py_ssize_t _n = 0;
29531
2.94k
    { // except_star_block
29532
2.94k
        if (p->error_indicator) {
29533
0
            p->level--;
29534
0
            return NULL;
29535
0
        }
29536
2.94k
        D(fprintf(stderr, "%*c> _loop1_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block"));
29537
2.94k
        excepthandler_ty except_star_block_var;
29538
2.94k
        while (
29539
5.44k
            (except_star_block_var = except_star_block_rule(p))  // except_star_block
29540
2.94k
        )
29541
2.49k
        {
29542
2.49k
            _res = except_star_block_var;
29543
2.49k
            if (_n == _children_capacity) {
29544
286
                _children_capacity *= 2;
29545
286
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29546
286
                if (!_new_children) {
29547
0
                    PyMem_Free(_children);
29548
0
                    p->error_indicator = 1;
29549
0
                    PyErr_NoMemory();
29550
0
                    p->level--;
29551
0
                    return NULL;
29552
0
                }
29553
286
                _children = _new_children;
29554
286
            }
29555
2.49k
            _children[_n++] = _res;
29556
2.49k
            _mark = p->mark;
29557
2.49k
        }
29558
2.94k
        p->mark = _mark;
29559
2.94k
        D(fprintf(stderr, "%*c%s _loop1_37[%d-%d]: %s failed!\n", p->level, ' ',
29560
2.94k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_star_block"));
29561
2.94k
    }
29562
2.94k
    if (_n == 0 || p->error_indicator) {
29563
1.45k
        PyMem_Free(_children);
29564
1.45k
        p->level--;
29565
1.45k
        return NULL;
29566
1.45k
    }
29567
1.49k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29568
1.49k
    if (!_seq) {
29569
0
        PyMem_Free(_children);
29570
0
        p->error_indicator = 1;
29571
0
        PyErr_NoMemory();
29572
0
        p->level--;
29573
0
        return NULL;
29574
0
    }
29575
3.98k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
29576
1.49k
    PyMem_Free(_children);
29577
1.49k
    p->level--;
29578
1.49k
    return _seq;
29579
1.49k
}
29580
29581
// _loop1_38: case_block
29582
static asdl_seq *
29583
_loop1_38_rule(Parser *p)
29584
1.72k
{
29585
1.72k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29586
0
        _Pypegen_stack_overflow(p);
29587
0
    }
29588
1.72k
    if (p->error_indicator) {
29589
0
        p->level--;
29590
0
        return NULL;
29591
0
    }
29592
1.72k
    void *_res = NULL;
29593
1.72k
    int _mark = p->mark;
29594
1.72k
    void **_children = PyMem_Malloc(sizeof(void *));
29595
1.72k
    if (!_children) {
29596
0
        p->error_indicator = 1;
29597
0
        PyErr_NoMemory();
29598
0
        p->level--;
29599
0
        return NULL;
29600
0
    }
29601
1.72k
    Py_ssize_t _children_capacity = 1;
29602
1.72k
    Py_ssize_t _n = 0;
29603
1.72k
    { // case_block
29604
1.72k
        if (p->error_indicator) {
29605
0
            p->level--;
29606
0
            return NULL;
29607
0
        }
29608
1.72k
        D(fprintf(stderr, "%*c> _loop1_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "case_block"));
29609
1.72k
        match_case_ty case_block_var;
29610
1.72k
        while (
29611
5.79k
            (case_block_var = case_block_rule(p))  // case_block
29612
1.72k
        )
29613
4.06k
        {
29614
4.06k
            _res = case_block_var;
29615
4.06k
            if (_n == _children_capacity) {
29616
702
                _children_capacity *= 2;
29617
702
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29618
702
                if (!_new_children) {
29619
0
                    PyMem_Free(_children);
29620
0
                    p->error_indicator = 1;
29621
0
                    PyErr_NoMemory();
29622
0
                    p->level--;
29623
0
                    return NULL;
29624
0
                }
29625
702
                _children = _new_children;
29626
702
            }
29627
4.06k
            _children[_n++] = _res;
29628
4.06k
            _mark = p->mark;
29629
4.06k
        }
29630
1.72k
        p->mark = _mark;
29631
1.72k
        D(fprintf(stderr, "%*c%s _loop1_38[%d-%d]: %s failed!\n", p->level, ' ',
29632
1.72k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "case_block"));
29633
1.72k
    }
29634
1.72k
    if (_n == 0 || p->error_indicator) {
29635
1.02k
        PyMem_Free(_children);
29636
1.02k
        p->level--;
29637
1.02k
        return NULL;
29638
1.02k
    }
29639
707
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29640
707
    if (!_seq) {
29641
0
        PyMem_Free(_children);
29642
0
        p->error_indicator = 1;
29643
0
        PyErr_NoMemory();
29644
0
        p->level--;
29645
0
        return NULL;
29646
0
    }
29647
4.73k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
29648
707
    PyMem_Free(_children);
29649
707
    p->level--;
29650
707
    return _seq;
29651
707
}
29652
29653
// _loop0_39: '|' closed_pattern
29654
static asdl_seq *
29655
_loop0_39_rule(Parser *p)
29656
156k
{
29657
156k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29658
0
        _Pypegen_stack_overflow(p);
29659
0
    }
29660
156k
    if (p->error_indicator) {
29661
19
        p->level--;
29662
19
        return NULL;
29663
19
    }
29664
156k
    void *_res = NULL;
29665
156k
    int _mark = p->mark;
29666
156k
    void **_children = PyMem_Malloc(sizeof(void *));
29667
156k
    if (!_children) {
29668
0
        p->error_indicator = 1;
29669
0
        PyErr_NoMemory();
29670
0
        p->level--;
29671
0
        return NULL;
29672
0
    }
29673
156k
    Py_ssize_t _children_capacity = 1;
29674
156k
    Py_ssize_t _n = 0;
29675
156k
    { // '|' closed_pattern
29676
156k
        if (p->error_indicator) {
29677
0
            p->level--;
29678
0
            return NULL;
29679
0
        }
29680
156k
        D(fprintf(stderr, "%*c> _loop0_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern"));
29681
156k
        Token * _literal;
29682
156k
        pattern_ty elem;
29683
156k
        while (
29684
163k
            (_literal = _PyPegen_expect_token(p, 18))  // token='|'
29685
163k
            &&
29686
163k
            (elem = closed_pattern_rule(p))  // closed_pattern
29687
156k
        )
29688
7.87k
        {
29689
7.87k
            _res = elem;
29690
7.87k
            if (_res == NULL && PyErr_Occurred()) {
29691
0
                p->error_indicator = 1;
29692
0
                PyMem_Free(_children);
29693
0
                p->level--;
29694
0
                return NULL;
29695
0
            }
29696
7.87k
            if (_n == _children_capacity) {
29697
1.37k
                _children_capacity *= 2;
29698
1.37k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29699
1.37k
                if (!_new_children) {
29700
0
                    PyMem_Free(_children);
29701
0
                    p->error_indicator = 1;
29702
0
                    PyErr_NoMemory();
29703
0
                    p->level--;
29704
0
                    return NULL;
29705
0
                }
29706
1.37k
                _children = _new_children;
29707
1.37k
            }
29708
7.87k
            _children[_n++] = _res;
29709
7.87k
            _mark = p->mark;
29710
7.87k
        }
29711
156k
        p->mark = _mark;
29712
156k
        D(fprintf(stderr, "%*c%s _loop0_39[%d-%d]: %s failed!\n", p->level, ' ',
29713
156k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|' closed_pattern"));
29714
156k
    }
29715
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29716
156k
    if (!_seq) {
29717
0
        PyMem_Free(_children);
29718
0
        p->error_indicator = 1;
29719
0
        PyErr_NoMemory();
29720
0
        p->level--;
29721
0
        return NULL;
29722
0
    }
29723
163k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
29724
156k
    PyMem_Free(_children);
29725
156k
    p->level--;
29726
156k
    return _seq;
29727
156k
}
29728
29729
// _gather_40: closed_pattern _loop0_39
29730
static asdl_seq *
29731
_gather_40_rule(Parser *p)
29732
241k
{
29733
241k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29734
0
        _Pypegen_stack_overflow(p);
29735
0
    }
29736
241k
    if (p->error_indicator) {
29737
0
        p->level--;
29738
0
        return NULL;
29739
0
    }
29740
241k
    asdl_seq * _res = NULL;
29741
241k
    int _mark = p->mark;
29742
241k
    { // closed_pattern _loop0_39
29743
241k
        if (p->error_indicator) {
29744
0
            p->level--;
29745
0
            return NULL;
29746
0
        }
29747
241k
        D(fprintf(stderr, "%*c> _gather_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_39"));
29748
241k
        pattern_ty elem;
29749
241k
        asdl_seq * seq;
29750
241k
        if (
29751
241k
            (elem = closed_pattern_rule(p))  // closed_pattern
29752
241k
            &&
29753
241k
            (seq = _loop0_39_rule(p))  // _loop0_39
29754
241k
        )
29755
156k
        {
29756
156k
            D(fprintf(stderr, "%*c+ _gather_40[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_39"));
29757
156k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
29758
156k
            goto done;
29759
156k
        }
29760
85.0k
        p->mark = _mark;
29761
85.0k
        D(fprintf(stderr, "%*c%s _gather_40[%d-%d]: %s failed!\n", p->level, ' ',
29762
85.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "closed_pattern _loop0_39"));
29763
85.0k
    }
29764
0
    _res = NULL;
29765
241k
  done:
29766
241k
    p->level--;
29767
241k
    return _res;
29768
85.0k
}
29769
29770
// _tmp_41: '+' | '-'
29771
static void *
29772
_tmp_41_rule(Parser *p)
29773
9.83k
{
29774
9.83k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29775
0
        _Pypegen_stack_overflow(p);
29776
0
    }
29777
9.83k
    if (p->error_indicator) {
29778
0
        p->level--;
29779
0
        return NULL;
29780
0
    }
29781
9.83k
    void * _res = NULL;
29782
9.83k
    int _mark = p->mark;
29783
9.83k
    { // '+'
29784
9.83k
        if (p->error_indicator) {
29785
0
            p->level--;
29786
0
            return NULL;
29787
0
        }
29788
9.83k
        D(fprintf(stderr, "%*c> _tmp_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'"));
29789
9.83k
        Token * _literal;
29790
9.83k
        if (
29791
9.83k
            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
29792
9.83k
        )
29793
379
        {
29794
379
            D(fprintf(stderr, "%*c+ _tmp_41[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'"));
29795
379
            _res = _literal;
29796
379
            goto done;
29797
379
        }
29798
9.45k
        p->mark = _mark;
29799
9.45k
        D(fprintf(stderr, "%*c%s _tmp_41[%d-%d]: %s failed!\n", p->level, ' ',
29800
9.45k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'"));
29801
9.45k
    }
29802
0
    { // '-'
29803
9.45k
        if (p->error_indicator) {
29804
8
            p->level--;
29805
8
            return NULL;
29806
8
        }
29807
9.44k
        D(fprintf(stderr, "%*c> _tmp_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'"));
29808
9.44k
        Token * _literal;
29809
9.44k
        if (
29810
9.44k
            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
29811
9.44k
        )
29812
741
        {
29813
741
            D(fprintf(stderr, "%*c+ _tmp_41[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'"));
29814
741
            _res = _literal;
29815
741
            goto done;
29816
741
        }
29817
8.70k
        p->mark = _mark;
29818
8.70k
        D(fprintf(stderr, "%*c%s _tmp_41[%d-%d]: %s failed!\n", p->level, ' ',
29819
8.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'"));
29820
8.70k
    }
29821
0
    _res = NULL;
29822
9.82k
  done:
29823
9.82k
    p->level--;
29824
9.82k
    return _res;
29825
8.70k
}
29826
29827
// _tmp_42: STRING | FSTRING_START | TSTRING_START
29828
static void *
29829
_tmp_42_rule(Parser *p)
29830
763k
{
29831
763k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29832
2
        _Pypegen_stack_overflow(p);
29833
2
    }
29834
763k
    if (p->error_indicator) {
29835
2
        p->level--;
29836
2
        return NULL;
29837
2
    }
29838
763k
    void * _res = NULL;
29839
763k
    int _mark = p->mark;
29840
763k
    { // STRING
29841
763k
        if (p->error_indicator) {
29842
0
            p->level--;
29843
0
            return NULL;
29844
0
        }
29845
763k
        D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING"));
29846
763k
        expr_ty string_var;
29847
763k
        if (
29848
763k
            (string_var = _PyPegen_string_token(p))  // STRING
29849
763k
        )
29850
83.9k
        {
29851
83.9k
            D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING"));
29852
83.9k
            _res = string_var;
29853
83.9k
            goto done;
29854
83.9k
        }
29855
679k
        p->mark = _mark;
29856
679k
        D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ',
29857
679k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING"));
29858
679k
    }
29859
0
    { // FSTRING_START
29860
679k
        if (p->error_indicator) {
29861
0
            p->level--;
29862
0
            return NULL;
29863
0
        }
29864
679k
        D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START"));
29865
679k
        Token * fstring_start_var;
29866
679k
        if (
29867
679k
            (fstring_start_var = _PyPegen_expect_token(p, FSTRING_START))  // token='FSTRING_START'
29868
679k
        )
29869
20.4k
        {
29870
20.4k
            D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START"));
29871
20.4k
            _res = fstring_start_var;
29872
20.4k
            goto done;
29873
20.4k
        }
29874
659k
        p->mark = _mark;
29875
659k
        D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ',
29876
659k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_START"));
29877
659k
    }
29878
0
    { // TSTRING_START
29879
659k
        if (p->error_indicator) {
29880
0
            p->level--;
29881
0
            return NULL;
29882
0
        }
29883
659k
        D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_START"));
29884
659k
        Token * tstring_start_var;
29885
659k
        if (
29886
659k
            (tstring_start_var = _PyPegen_expect_token(p, TSTRING_START))  // token='TSTRING_START'
29887
659k
        )
29888
4.62k
        {
29889
4.62k
            D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_START"));
29890
4.62k
            _res = tstring_start_var;
29891
4.62k
            goto done;
29892
4.62k
        }
29893
654k
        p->mark = _mark;
29894
654k
        D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ',
29895
654k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TSTRING_START"));
29896
654k
    }
29897
0
    _res = NULL;
29898
763k
  done:
29899
763k
    p->level--;
29900
763k
    return _res;
29901
654k
}
29902
29903
// _tmp_43: '.' | '(' | '='
29904
static void *
29905
_tmp_43_rule(Parser *p)
29906
31.6k
{
29907
31.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29908
0
        _Pypegen_stack_overflow(p);
29909
0
    }
29910
31.6k
    if (p->error_indicator) {
29911
0
        p->level--;
29912
0
        return NULL;
29913
0
    }
29914
31.6k
    void * _res = NULL;
29915
31.6k
    int _mark = p->mark;
29916
31.6k
    { // '.'
29917
31.6k
        if (p->error_indicator) {
29918
0
            p->level--;
29919
0
            return NULL;
29920
0
        }
29921
31.6k
        D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
29922
31.6k
        Token * _literal;
29923
31.6k
        if (
29924
31.6k
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
29925
31.6k
        )
29926
718
        {
29927
718
            D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'"));
29928
718
            _res = _literal;
29929
718
            goto done;
29930
718
        }
29931
30.9k
        p->mark = _mark;
29932
30.9k
        D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ',
29933
30.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'"));
29934
30.9k
    }
29935
0
    { // '('
29936
30.9k
        if (p->error_indicator) {
29937
25
            p->level--;
29938
25
            return NULL;
29939
25
        }
29940
30.8k
        D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
29941
30.8k
        Token * _literal;
29942
30.8k
        if (
29943
30.8k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
29944
30.8k
        )
29945
9.01k
        {
29946
9.01k
            D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('"));
29947
9.01k
            _res = _literal;
29948
9.01k
            goto done;
29949
9.01k
        }
29950
21.8k
        p->mark = _mark;
29951
21.8k
        D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ',
29952
21.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('"));
29953
21.8k
    }
29954
0
    { // '='
29955
21.8k
        if (p->error_indicator) {
29956
0
            p->level--;
29957
0
            return NULL;
29958
0
        }
29959
21.8k
        D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
29960
21.8k
        Token * _literal;
29961
21.8k
        if (
29962
21.8k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
29963
21.8k
        )
29964
2.91k
        {
29965
2.91k
            D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='"));
29966
2.91k
            _res = _literal;
29967
2.91k
            goto done;
29968
2.91k
        }
29969
18.9k
        p->mark = _mark;
29970
18.9k
        D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ',
29971
18.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='"));
29972
18.9k
    }
29973
0
    _res = NULL;
29974
31.6k
  done:
29975
31.6k
    p->level--;
29976
31.6k
    return _res;
29977
18.9k
}
29978
29979
// _loop0_44: ',' maybe_star_pattern
29980
static asdl_seq *
29981
_loop0_44_rule(Parser *p)
29982
3.13k
{
29983
3.13k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
29984
0
        _Pypegen_stack_overflow(p);
29985
0
    }
29986
3.13k
    if (p->error_indicator) {
29987
1
        p->level--;
29988
1
        return NULL;
29989
1
    }
29990
3.13k
    void *_res = NULL;
29991
3.13k
    int _mark = p->mark;
29992
3.13k
    void **_children = PyMem_Malloc(sizeof(void *));
29993
3.13k
    if (!_children) {
29994
0
        p->error_indicator = 1;
29995
0
        PyErr_NoMemory();
29996
0
        p->level--;
29997
0
        return NULL;
29998
0
    }
29999
3.13k
    Py_ssize_t _children_capacity = 1;
30000
3.13k
    Py_ssize_t _n = 0;
30001
3.13k
    { // ',' maybe_star_pattern
30002
3.13k
        if (p->error_indicator) {
30003
0
            p->level--;
30004
0
            return NULL;
30005
0
        }
30006
3.13k
        D(fprintf(stderr, "%*c> _loop0_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern"));
30007
3.13k
        Token * _literal;
30008
3.13k
        pattern_ty elem;
30009
3.13k
        while (
30010
13.6k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
30011
13.6k
            &&
30012
13.6k
            (elem = maybe_star_pattern_rule(p))  // maybe_star_pattern
30013
3.13k
        )
30014
10.5k
        {
30015
10.5k
            _res = elem;
30016
10.5k
            if (_res == NULL && PyErr_Occurred()) {
30017
0
                p->error_indicator = 1;
30018
0
                PyMem_Free(_children);
30019
0
                p->level--;
30020
0
                return NULL;
30021
0
            }
30022
10.5k
            if (_n == _children_capacity) {
30023
2.16k
                _children_capacity *= 2;
30024
2.16k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30025
2.16k
                if (!_new_children) {
30026
0
                    PyMem_Free(_children);
30027
0
                    p->error_indicator = 1;
30028
0
                    PyErr_NoMemory();
30029
0
                    p->level--;
30030
0
                    return NULL;
30031
0
                }
30032
2.16k
                _children = _new_children;
30033
2.16k
            }
30034
10.5k
            _children[_n++] = _res;
30035
10.5k
            _mark = p->mark;
30036
10.5k
        }
30037
3.13k
        p->mark = _mark;
30038
3.13k
        D(fprintf(stderr, "%*c%s _loop0_44[%d-%d]: %s failed!\n", p->level, ' ',
30039
3.13k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' maybe_star_pattern"));
30040
3.13k
    }
30041
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30042
3.13k
    if (!_seq) {
30043
0
        PyMem_Free(_children);
30044
0
        p->error_indicator = 1;
30045
0
        PyErr_NoMemory();
30046
0
        p->level--;
30047
0
        return NULL;
30048
0
    }
30049
13.6k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
30050
3.13k
    PyMem_Free(_children);
30051
3.13k
    p->level--;
30052
3.13k
    return _seq;
30053
3.13k
}
30054
30055
// _gather_45: maybe_star_pattern _loop0_44
30056
static asdl_seq *
30057
_gather_45_rule(Parser *p)
30058
5.81k
{
30059
5.81k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30060
0
        _Pypegen_stack_overflow(p);
30061
0
    }
30062
5.81k
    if (p->error_indicator) {
30063
0
        p->level--;
30064
0
        return NULL;
30065
0
    }
30066
5.81k
    asdl_seq * _res = NULL;
30067
5.81k
    int _mark = p->mark;
30068
5.81k
    { // maybe_star_pattern _loop0_44
30069
5.81k
        if (p->error_indicator) {
30070
0
            p->level--;
30071
0
            return NULL;
30072
0
        }
30073
5.81k
        D(fprintf(stderr, "%*c> _gather_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_44"));
30074
5.81k
        pattern_ty elem;
30075
5.81k
        asdl_seq * seq;
30076
5.81k
        if (
30077
5.81k
            (elem = maybe_star_pattern_rule(p))  // maybe_star_pattern
30078
5.81k
            &&
30079
5.81k
            (seq = _loop0_44_rule(p))  // _loop0_44
30080
5.81k
        )
30081
3.13k
        {
30082
3.13k
            D(fprintf(stderr, "%*c+ _gather_45[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_44"));
30083
3.13k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30084
3.13k
            goto done;
30085
3.13k
        }
30086
2.68k
        p->mark = _mark;
30087
2.68k
        D(fprintf(stderr, "%*c%s _gather_45[%d-%d]: %s failed!\n", p->level, ' ',
30088
2.68k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_44"));
30089
2.68k
    }
30090
0
    _res = NULL;
30091
5.81k
  done:
30092
5.81k
    p->level--;
30093
5.81k
    return _res;
30094
2.68k
}
30095
30096
// _loop0_46: ',' key_value_pattern
30097
static asdl_seq *
30098
_loop0_46_rule(Parser *p)
30099
3.50k
{
30100
3.50k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30101
0
        _Pypegen_stack_overflow(p);
30102
0
    }
30103
3.50k
    if (p->error_indicator) {
30104
1
        p->level--;
30105
1
        return NULL;
30106
1
    }
30107
3.50k
    void *_res = NULL;
30108
3.50k
    int _mark = p->mark;
30109
3.50k
    void **_children = PyMem_Malloc(sizeof(void *));
30110
3.50k
    if (!_children) {
30111
0
        p->error_indicator = 1;
30112
0
        PyErr_NoMemory();
30113
0
        p->level--;
30114
0
        return NULL;
30115
0
    }
30116
3.50k
    Py_ssize_t _children_capacity = 1;
30117
3.50k
    Py_ssize_t _n = 0;
30118
3.50k
    { // ',' key_value_pattern
30119
3.50k
        if (p->error_indicator) {
30120
0
            p->level--;
30121
0
            return NULL;
30122
0
        }
30123
3.50k
        D(fprintf(stderr, "%*c> _loop0_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern"));
30124
3.50k
        Token * _literal;
30125
3.50k
        KeyPatternPair* elem;
30126
3.50k
        while (
30127
5.34k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
30128
5.34k
            &&
30129
5.34k
            (elem = key_value_pattern_rule(p))  // key_value_pattern
30130
3.50k
        )
30131
1.84k
        {
30132
1.84k
            _res = elem;
30133
1.84k
            if (_res == NULL && PyErr_Occurred()) {
30134
0
                p->error_indicator = 1;
30135
0
                PyMem_Free(_children);
30136
0
                p->level--;
30137
0
                return NULL;
30138
0
            }
30139
1.84k
            if (_n == _children_capacity) {
30140
325
                _children_capacity *= 2;
30141
325
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30142
325
                if (!_new_children) {
30143
0
                    PyMem_Free(_children);
30144
0
                    p->error_indicator = 1;
30145
0
                    PyErr_NoMemory();
30146
0
                    p->level--;
30147
0
                    return NULL;
30148
0
                }
30149
325
                _children = _new_children;
30150
325
            }
30151
1.84k
            _children[_n++] = _res;
30152
1.84k
            _mark = p->mark;
30153
1.84k
        }
30154
3.50k
        p->mark = _mark;
30155
3.50k
        D(fprintf(stderr, "%*c%s _loop0_46[%d-%d]: %s failed!\n", p->level, ' ',
30156
3.50k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' key_value_pattern"));
30157
3.50k
    }
30158
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30159
3.50k
    if (!_seq) {
30160
0
        PyMem_Free(_children);
30161
0
        p->error_indicator = 1;
30162
0
        PyErr_NoMemory();
30163
0
        p->level--;
30164
0
        return NULL;
30165
0
    }
30166
5.34k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
30167
3.50k
    PyMem_Free(_children);
30168
3.50k
    p->level--;
30169
3.50k
    return _seq;
30170
3.50k
}
30171
30172
// _gather_47: key_value_pattern _loop0_46
30173
static asdl_seq *
30174
_gather_47_rule(Parser *p)
30175
5.16k
{
30176
5.16k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30177
0
        _Pypegen_stack_overflow(p);
30178
0
    }
30179
5.16k
    if (p->error_indicator) {
30180
0
        p->level--;
30181
0
        return NULL;
30182
0
    }
30183
5.16k
    asdl_seq * _res = NULL;
30184
5.16k
    int _mark = p->mark;
30185
5.16k
    { // key_value_pattern _loop0_46
30186
5.16k
        if (p->error_indicator) {
30187
0
            p->level--;
30188
0
            return NULL;
30189
0
        }
30190
5.16k
        D(fprintf(stderr, "%*c> _gather_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_46"));
30191
5.16k
        KeyPatternPair* elem;
30192
5.16k
        asdl_seq * seq;
30193
5.16k
        if (
30194
5.16k
            (elem = key_value_pattern_rule(p))  // key_value_pattern
30195
5.16k
            &&
30196
5.16k
            (seq = _loop0_46_rule(p))  // _loop0_46
30197
5.16k
        )
30198
3.50k
        {
30199
3.50k
            D(fprintf(stderr, "%*c+ _gather_47[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_46"));
30200
3.50k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30201
3.50k
            goto done;
30202
3.50k
        }
30203
1.65k
        p->mark = _mark;
30204
1.65k
        D(fprintf(stderr, "%*c%s _gather_47[%d-%d]: %s failed!\n", p->level, ' ',
30205
1.65k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "key_value_pattern _loop0_46"));
30206
1.65k
    }
30207
0
    _res = NULL;
30208
5.16k
  done:
30209
5.16k
    p->level--;
30210
5.16k
    return _res;
30211
1.65k
}
30212
30213
// _tmp_48: literal_expr | attr
30214
static void *
30215
_tmp_48_rule(Parser *p)
30216
9.04k
{
30217
9.04k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30218
0
        _Pypegen_stack_overflow(p);
30219
0
    }
30220
9.04k
    if (p->error_indicator) {
30221
0
        p->level--;
30222
0
        return NULL;
30223
0
    }
30224
9.04k
    void * _res = NULL;
30225
9.04k
    int _mark = p->mark;
30226
9.04k
    { // literal_expr
30227
9.04k
        if (p->error_indicator) {
30228
0
            p->level--;
30229
0
            return NULL;
30230
0
        }
30231
9.04k
        D(fprintf(stderr, "%*c> _tmp_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr"));
30232
9.04k
        expr_ty literal_expr_var;
30233
9.04k
        if (
30234
9.04k
            (literal_expr_var = literal_expr_rule(p))  // literal_expr
30235
9.04k
        )
30236
8.22k
        {
30237
8.22k
            D(fprintf(stderr, "%*c+ _tmp_48[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_expr"));
30238
8.22k
            _res = literal_expr_var;
30239
8.22k
            goto done;
30240
8.22k
        }
30241
821
        p->mark = _mark;
30242
821
        D(fprintf(stderr, "%*c%s _tmp_48[%d-%d]: %s failed!\n", p->level, ' ',
30243
821
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_expr"));
30244
821
    }
30245
0
    { // attr
30246
821
        if (p->error_indicator) {
30247
21
            p->level--;
30248
21
            return NULL;
30249
21
        }
30250
800
        D(fprintf(stderr, "%*c> _tmp_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr"));
30251
800
        expr_ty attr_var;
30252
800
        if (
30253
800
            (attr_var = attr_rule(p))  // attr
30254
800
        )
30255
19
        {
30256
19
            D(fprintf(stderr, "%*c+ _tmp_48[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr"));
30257
19
            _res = attr_var;
30258
19
            goto done;
30259
19
        }
30260
781
        p->mark = _mark;
30261
781
        D(fprintf(stderr, "%*c%s _tmp_48[%d-%d]: %s failed!\n", p->level, ' ',
30262
781
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr"));
30263
781
    }
30264
0
    _res = NULL;
30265
9.02k
  done:
30266
9.02k
    p->level--;
30267
9.02k
    return _res;
30268
781
}
30269
30270
// _loop0_49: ',' pattern
30271
static asdl_seq *
30272
_loop0_49_rule(Parser *p)
30273
10.5k
{
30274
10.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30275
0
        _Pypegen_stack_overflow(p);
30276
0
    }
30277
10.5k
    if (p->error_indicator) {
30278
1
        p->level--;
30279
1
        return NULL;
30280
1
    }
30281
10.5k
    void *_res = NULL;
30282
10.5k
    int _mark = p->mark;
30283
10.5k
    void **_children = PyMem_Malloc(sizeof(void *));
30284
10.5k
    if (!_children) {
30285
0
        p->error_indicator = 1;
30286
0
        PyErr_NoMemory();
30287
0
        p->level--;
30288
0
        return NULL;
30289
0
    }
30290
10.5k
    Py_ssize_t _children_capacity = 1;
30291
10.5k
    Py_ssize_t _n = 0;
30292
10.5k
    { // ',' pattern
30293
10.5k
        if (p->error_indicator) {
30294
0
            p->level--;
30295
0
            return NULL;
30296
0
        }
30297
10.5k
        D(fprintf(stderr, "%*c> _loop0_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern"));
30298
10.5k
        Token * _literal;
30299
10.5k
        pattern_ty elem;
30300
10.5k
        while (
30301
15.4k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
30302
15.4k
            &&
30303
15.4k
            (elem = pattern_rule(p))  // pattern
30304
10.5k
        )
30305
4.89k
        {
30306
4.89k
            _res = elem;
30307
4.89k
            if (_res == NULL && PyErr_Occurred()) {
30308
0
                p->error_indicator = 1;
30309
0
                PyMem_Free(_children);
30310
0
                p->level--;
30311
0
                return NULL;
30312
0
            }
30313
4.89k
            if (_n == _children_capacity) {
30314
982
                _children_capacity *= 2;
30315
982
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30316
982
                if (!_new_children) {
30317
0
                    PyMem_Free(_children);
30318
0
                    p->error_indicator = 1;
30319
0
                    PyErr_NoMemory();
30320
0
                    p->level--;
30321
0
                    return NULL;
30322
0
                }
30323
982
                _children = _new_children;
30324
982
            }
30325
4.89k
            _children[_n++] = _res;
30326
4.89k
            _mark = p->mark;
30327
4.89k
        }
30328
10.5k
        p->mark = _mark;
30329
10.5k
        D(fprintf(stderr, "%*c%s _loop0_49[%d-%d]: %s failed!\n", p->level, ' ',
30330
10.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' pattern"));
30331
10.5k
    }
30332
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30333
10.5k
    if (!_seq) {
30334
0
        PyMem_Free(_children);
30335
0
        p->error_indicator = 1;
30336
0
        PyErr_NoMemory();
30337
0
        p->level--;
30338
0
        return NULL;
30339
0
    }
30340
15.4k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
30341
10.5k
    PyMem_Free(_children);
30342
10.5k
    p->level--;
30343
10.5k
    return _seq;
30344
10.5k
}
30345
30346
// _gather_50: pattern _loop0_49
30347
static asdl_seq *
30348
_gather_50_rule(Parser *p)
30349
17.0k
{
30350
17.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30351
0
        _Pypegen_stack_overflow(p);
30352
0
    }
30353
17.0k
    if (p->error_indicator) {
30354
0
        p->level--;
30355
0
        return NULL;
30356
0
    }
30357
17.0k
    asdl_seq * _res = NULL;
30358
17.0k
    int _mark = p->mark;
30359
17.0k
    { // pattern _loop0_49
30360
17.0k
        if (p->error_indicator) {
30361
0
            p->level--;
30362
0
            return NULL;
30363
0
        }
30364
17.0k
        D(fprintf(stderr, "%*c> _gather_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_49"));
30365
17.0k
        pattern_ty elem;
30366
17.0k
        asdl_seq * seq;
30367
17.0k
        if (
30368
17.0k
            (elem = pattern_rule(p))  // pattern
30369
17.0k
            &&
30370
17.0k
            (seq = _loop0_49_rule(p))  // _loop0_49
30371
17.0k
        )
30372
10.5k
        {
30373
10.5k
            D(fprintf(stderr, "%*c+ _gather_50[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern _loop0_49"));
30374
10.5k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30375
10.5k
            goto done;
30376
10.5k
        }
30377
6.52k
        p->mark = _mark;
30378
6.52k
        D(fprintf(stderr, "%*c%s _gather_50[%d-%d]: %s failed!\n", p->level, ' ',
30379
6.52k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern _loop0_49"));
30380
6.52k
    }
30381
0
    _res = NULL;
30382
17.0k
  done:
30383
17.0k
    p->level--;
30384
17.0k
    return _res;
30385
6.52k
}
30386
30387
// _loop0_51: ',' keyword_pattern
30388
static asdl_seq *
30389
_loop0_51_rule(Parser *p)
30390
4.05k
{
30391
4.05k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30392
0
        _Pypegen_stack_overflow(p);
30393
0
    }
30394
4.05k
    if (p->error_indicator) {
30395
1
        p->level--;
30396
1
        return NULL;
30397
1
    }
30398
4.05k
    void *_res = NULL;
30399
4.05k
    int _mark = p->mark;
30400
4.05k
    void **_children = PyMem_Malloc(sizeof(void *));
30401
4.05k
    if (!_children) {
30402
0
        p->error_indicator = 1;
30403
0
        PyErr_NoMemory();
30404
0
        p->level--;
30405
0
        return NULL;
30406
0
    }
30407
4.05k
    Py_ssize_t _children_capacity = 1;
30408
4.05k
    Py_ssize_t _n = 0;
30409
4.05k
    { // ',' keyword_pattern
30410
4.05k
        if (p->error_indicator) {
30411
0
            p->level--;
30412
0
            return NULL;
30413
0
        }
30414
4.05k
        D(fprintf(stderr, "%*c> _loop0_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern"));
30415
4.05k
        Token * _literal;
30416
4.05k
        KeyPatternPair* elem;
30417
4.05k
        while (
30418
5.99k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
30419
5.99k
            &&
30420
5.99k
            (elem = keyword_pattern_rule(p))  // keyword_pattern
30421
4.05k
        )
30422
1.94k
        {
30423
1.94k
            _res = elem;
30424
1.94k
            if (_res == NULL && PyErr_Occurred()) {
30425
0
                p->error_indicator = 1;
30426
0
                PyMem_Free(_children);
30427
0
                p->level--;
30428
0
                return NULL;
30429
0
            }
30430
1.94k
            if (_n == _children_capacity) {
30431
906
                _children_capacity *= 2;
30432
906
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30433
906
                if (!_new_children) {
30434
0
                    PyMem_Free(_children);
30435
0
                    p->error_indicator = 1;
30436
0
                    PyErr_NoMemory();
30437
0
                    p->level--;
30438
0
                    return NULL;
30439
0
                }
30440
906
                _children = _new_children;
30441
906
            }
30442
1.94k
            _children[_n++] = _res;
30443
1.94k
            _mark = p->mark;
30444
1.94k
        }
30445
4.05k
        p->mark = _mark;
30446
4.05k
        D(fprintf(stderr, "%*c%s _loop0_51[%d-%d]: %s failed!\n", p->level, ' ',
30447
4.05k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' keyword_pattern"));
30448
4.05k
    }
30449
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30450
4.05k
    if (!_seq) {
30451
0
        PyMem_Free(_children);
30452
0
        p->error_indicator = 1;
30453
0
        PyErr_NoMemory();
30454
0
        p->level--;
30455
0
        return NULL;
30456
0
    }
30457
5.99k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
30458
4.05k
    PyMem_Free(_children);
30459
4.05k
    p->level--;
30460
4.05k
    return _seq;
30461
4.05k
}
30462
30463
// _gather_52: keyword_pattern _loop0_51
30464
static asdl_seq *
30465
_gather_52_rule(Parser *p)
30466
11.1k
{
30467
11.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30468
0
        _Pypegen_stack_overflow(p);
30469
0
    }
30470
11.1k
    if (p->error_indicator) {
30471
0
        p->level--;
30472
0
        return NULL;
30473
0
    }
30474
11.1k
    asdl_seq * _res = NULL;
30475
11.1k
    int _mark = p->mark;
30476
11.1k
    { // keyword_pattern _loop0_51
30477
11.1k
        if (p->error_indicator) {
30478
0
            p->level--;
30479
0
            return NULL;
30480
0
        }
30481
11.1k
        D(fprintf(stderr, "%*c> _gather_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_51"));
30482
11.1k
        KeyPatternPair* elem;
30483
11.1k
        asdl_seq * seq;
30484
11.1k
        if (
30485
11.1k
            (elem = keyword_pattern_rule(p))  // keyword_pattern
30486
11.1k
            &&
30487
11.1k
            (seq = _loop0_51_rule(p))  // _loop0_51
30488
11.1k
        )
30489
4.05k
        {
30490
4.05k
            D(fprintf(stderr, "%*c+ _gather_52[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_51"));
30491
4.05k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30492
4.05k
            goto done;
30493
4.05k
        }
30494
7.08k
        p->mark = _mark;
30495
7.08k
        D(fprintf(stderr, "%*c%s _gather_52[%d-%d]: %s failed!\n", p->level, ' ',
30496
7.08k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "keyword_pattern _loop0_51"));
30497
7.08k
    }
30498
0
    _res = NULL;
30499
11.1k
  done:
30500
11.1k
    p->level--;
30501
11.1k
    return _res;
30502
7.08k
}
30503
30504
// _loop0_53: ',' type_param
30505
static asdl_seq *
30506
_loop0_53_rule(Parser *p)
30507
1.57k
{
30508
1.57k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30509
0
        _Pypegen_stack_overflow(p);
30510
0
    }
30511
1.57k
    if (p->error_indicator) {
30512
0
        p->level--;
30513
0
        return NULL;
30514
0
    }
30515
1.57k
    void *_res = NULL;
30516
1.57k
    int _mark = p->mark;
30517
1.57k
    void **_children = PyMem_Malloc(sizeof(void *));
30518
1.57k
    if (!_children) {
30519
0
        p->error_indicator = 1;
30520
0
        PyErr_NoMemory();
30521
0
        p->level--;
30522
0
        return NULL;
30523
0
    }
30524
1.57k
    Py_ssize_t _children_capacity = 1;
30525
1.57k
    Py_ssize_t _n = 0;
30526
1.57k
    { // ',' type_param
30527
1.57k
        if (p->error_indicator) {
30528
0
            p->level--;
30529
0
            return NULL;
30530
0
        }
30531
1.57k
        D(fprintf(stderr, "%*c> _loop0_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' type_param"));
30532
1.57k
        Token * _literal;
30533
1.57k
        type_param_ty elem;
30534
1.57k
        while (
30535
10.7k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
30536
10.7k
            &&
30537
10.7k
            (elem = type_param_rule(p))  // type_param
30538
1.57k
        )
30539
9.21k
        {
30540
9.21k
            _res = elem;
30541
9.21k
            if (_res == NULL && PyErr_Occurred()) {
30542
0
                p->error_indicator = 1;
30543
0
                PyMem_Free(_children);
30544
0
                p->level--;
30545
0
                return NULL;
30546
0
            }
30547
9.21k
            if (_n == _children_capacity) {
30548
865
                _children_capacity *= 2;
30549
865
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30550
865
                if (!_new_children) {
30551
0
                    PyMem_Free(_children);
30552
0
                    p->error_indicator = 1;
30553
0
                    PyErr_NoMemory();
30554
0
                    p->level--;
30555
0
                    return NULL;
30556
0
                }
30557
865
                _children = _new_children;
30558
865
            }
30559
9.21k
            _children[_n++] = _res;
30560
9.21k
            _mark = p->mark;
30561
9.21k
        }
30562
1.57k
        p->mark = _mark;
30563
1.57k
        D(fprintf(stderr, "%*c%s _loop0_53[%d-%d]: %s failed!\n", p->level, ' ',
30564
1.57k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' type_param"));
30565
1.57k
    }
30566
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30567
1.57k
    if (!_seq) {
30568
0
        PyMem_Free(_children);
30569
0
        p->error_indicator = 1;
30570
0
        PyErr_NoMemory();
30571
0
        p->level--;
30572
0
        return NULL;
30573
0
    }
30574
10.7k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
30575
1.57k
    PyMem_Free(_children);
30576
1.57k
    p->level--;
30577
1.57k
    return _seq;
30578
1.57k
}
30579
30580
// _gather_54: type_param _loop0_53
30581
static asdl_seq *
30582
_gather_54_rule(Parser *p)
30583
1.60k
{
30584
1.60k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30585
0
        _Pypegen_stack_overflow(p);
30586
0
    }
30587
1.60k
    if (p->error_indicator) {
30588
0
        p->level--;
30589
0
        return NULL;
30590
0
    }
30591
1.60k
    asdl_seq * _res = NULL;
30592
1.60k
    int _mark = p->mark;
30593
1.60k
    { // type_param _loop0_53
30594
1.60k
        if (p->error_indicator) {
30595
0
            p->level--;
30596
0
            return NULL;
30597
0
        }
30598
1.60k
        D(fprintf(stderr, "%*c> _gather_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "type_param _loop0_53"));
30599
1.60k
        type_param_ty elem;
30600
1.60k
        asdl_seq * seq;
30601
1.60k
        if (
30602
1.60k
            (elem = type_param_rule(p))  // type_param
30603
1.60k
            &&
30604
1.60k
            (seq = _loop0_53_rule(p))  // _loop0_53
30605
1.60k
        )
30606
1.57k
        {
30607
1.57k
            D(fprintf(stderr, "%*c+ _gather_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "type_param _loop0_53"));
30608
1.57k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30609
1.57k
            goto done;
30610
1.57k
        }
30611
31
        p->mark = _mark;
30612
31
        D(fprintf(stderr, "%*c%s _gather_54[%d-%d]: %s failed!\n", p->level, ' ',
30613
31
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "type_param _loop0_53"));
30614
31
    }
30615
0
    _res = NULL;
30616
1.60k
  done:
30617
1.60k
    p->level--;
30618
1.60k
    return _res;
30619
31
}
30620
30621
// _loop1_55: (',' expression)
30622
static asdl_seq *
30623
_loop1_55_rule(Parser *p)
30624
2.77k
{
30625
2.77k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30626
0
        _Pypegen_stack_overflow(p);
30627
0
    }
30628
2.77k
    if (p->error_indicator) {
30629
0
        p->level--;
30630
0
        return NULL;
30631
0
    }
30632
2.77k
    void *_res = NULL;
30633
2.77k
    int _mark = p->mark;
30634
2.77k
    void **_children = PyMem_Malloc(sizeof(void *));
30635
2.77k
    if (!_children) {
30636
0
        p->error_indicator = 1;
30637
0
        PyErr_NoMemory();
30638
0
        p->level--;
30639
0
        return NULL;
30640
0
    }
30641
2.77k
    Py_ssize_t _children_capacity = 1;
30642
2.77k
    Py_ssize_t _n = 0;
30643
2.77k
    { // (',' expression)
30644
2.77k
        if (p->error_indicator) {
30645
0
            p->level--;
30646
0
            return NULL;
30647
0
        }
30648
2.77k
        D(fprintf(stderr, "%*c> _loop1_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)"));
30649
2.77k
        void *_tmp_16_var;
30650
2.77k
        while (
30651
4.25k
            (_tmp_16_var = _tmp_16_rule(p))  // ',' expression
30652
2.77k
        )
30653
1.48k
        {
30654
1.48k
            _res = _tmp_16_var;
30655
1.48k
            if (_n == _children_capacity) {
30656
312
                _children_capacity *= 2;
30657
312
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30658
312
                if (!_new_children) {
30659
0
                    PyMem_Free(_children);
30660
0
                    p->error_indicator = 1;
30661
0
                    PyErr_NoMemory();
30662
0
                    p->level--;
30663
0
                    return NULL;
30664
0
                }
30665
312
                _children = _new_children;
30666
312
            }
30667
1.48k
            _children[_n++] = _res;
30668
1.48k
            _mark = p->mark;
30669
1.48k
        }
30670
2.77k
        p->mark = _mark;
30671
2.77k
        D(fprintf(stderr, "%*c%s _loop1_55[%d-%d]: %s failed!\n", p->level, ' ',
30672
2.77k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' expression)"));
30673
2.77k
    }
30674
2.77k
    if (_n == 0 || p->error_indicator) {
30675
1.84k
        PyMem_Free(_children);
30676
1.84k
        p->level--;
30677
1.84k
        return NULL;
30678
1.84k
    }
30679
934
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30680
934
    if (!_seq) {
30681
0
        PyMem_Free(_children);
30682
0
        p->error_indicator = 1;
30683
0
        PyErr_NoMemory();
30684
0
        p->level--;
30685
0
        return NULL;
30686
0
    }
30687
2.41k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
30688
934
    PyMem_Free(_children);
30689
934
    p->level--;
30690
934
    return _seq;
30691
934
}
30692
30693
// _loop1_56: (',' star_expression)
30694
static asdl_seq *
30695
_loop1_56_rule(Parser *p)
30696
194k
{
30697
194k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30698
0
        _Pypegen_stack_overflow(p);
30699
0
    }
30700
194k
    if (p->error_indicator) {
30701
0
        p->level--;
30702
0
        return NULL;
30703
0
    }
30704
194k
    void *_res = NULL;
30705
194k
    int _mark = p->mark;
30706
194k
    void **_children = PyMem_Malloc(sizeof(void *));
30707
194k
    if (!_children) {
30708
0
        p->error_indicator = 1;
30709
0
        PyErr_NoMemory();
30710
0
        p->level--;
30711
0
        return NULL;
30712
0
    }
30713
194k
    Py_ssize_t _children_capacity = 1;
30714
194k
    Py_ssize_t _n = 0;
30715
194k
    { // (',' star_expression)
30716
194k
        if (p->error_indicator) {
30717
0
            p->level--;
30718
0
            return NULL;
30719
0
        }
30720
194k
        D(fprintf(stderr, "%*c> _loop1_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)"));
30721
194k
        void *_tmp_157_var;
30722
194k
        while (
30723
208k
            (_tmp_157_var = _tmp_157_rule(p))  // ',' star_expression
30724
194k
        )
30725
13.6k
        {
30726
13.6k
            _res = _tmp_157_var;
30727
13.6k
            if (_n == _children_capacity) {
30728
2.83k
                _children_capacity *= 2;
30729
2.83k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30730
2.83k
                if (!_new_children) {
30731
0
                    PyMem_Free(_children);
30732
0
                    p->error_indicator = 1;
30733
0
                    PyErr_NoMemory();
30734
0
                    p->level--;
30735
0
                    return NULL;
30736
0
                }
30737
2.83k
                _children = _new_children;
30738
2.83k
            }
30739
13.6k
            _children[_n++] = _res;
30740
13.6k
            _mark = p->mark;
30741
13.6k
        }
30742
194k
        p->mark = _mark;
30743
194k
        D(fprintf(stderr, "%*c%s _loop1_56[%d-%d]: %s failed!\n", p->level, ' ',
30744
194k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_expression)"));
30745
194k
    }
30746
194k
    if (_n == 0 || p->error_indicator) {
30747
189k
        PyMem_Free(_children);
30748
189k
        p->level--;
30749
189k
        return NULL;
30750
189k
    }
30751
5.23k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30752
5.23k
    if (!_seq) {
30753
0
        PyMem_Free(_children);
30754
0
        p->error_indicator = 1;
30755
0
        PyErr_NoMemory();
30756
0
        p->level--;
30757
0
        return NULL;
30758
0
    }
30759
18.3k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
30760
5.23k
    PyMem_Free(_children);
30761
5.23k
    p->level--;
30762
5.23k
    return _seq;
30763
5.23k
}
30764
30765
// _loop0_57: ',' star_named_expression
30766
static asdl_seq *
30767
_loop0_57_rule(Parser *p)
30768
37.3k
{
30769
37.3k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30770
0
        _Pypegen_stack_overflow(p);
30771
0
    }
30772
37.3k
    if (p->error_indicator) {
30773
0
        p->level--;
30774
0
        return NULL;
30775
0
    }
30776
37.3k
    void *_res = NULL;
30777
37.3k
    int _mark = p->mark;
30778
37.3k
    void **_children = PyMem_Malloc(sizeof(void *));
30779
37.3k
    if (!_children) {
30780
0
        p->error_indicator = 1;
30781
0
        PyErr_NoMemory();
30782
0
        p->level--;
30783
0
        return NULL;
30784
0
    }
30785
37.3k
    Py_ssize_t _children_capacity = 1;
30786
37.3k
    Py_ssize_t _n = 0;
30787
37.3k
    { // ',' star_named_expression
30788
37.3k
        if (p->error_indicator) {
30789
0
            p->level--;
30790
0
            return NULL;
30791
0
        }
30792
37.3k
        D(fprintf(stderr, "%*c> _loop0_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression"));
30793
37.3k
        Token * _literal;
30794
37.3k
        expr_ty elem;
30795
37.3k
        while (
30796
81.3k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
30797
81.3k
            &&
30798
81.3k
            (elem = star_named_expression_rule(p))  // star_named_expression
30799
37.3k
        )
30800
44.0k
        {
30801
44.0k
            _res = elem;
30802
44.0k
            if (_res == NULL && PyErr_Occurred()) {
30803
0
                p->error_indicator = 1;
30804
0
                PyMem_Free(_children);
30805
0
                p->level--;
30806
0
                return NULL;
30807
0
            }
30808
44.0k
            if (_n == _children_capacity) {
30809
9.53k
                _children_capacity *= 2;
30810
9.53k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30811
9.53k
                if (!_new_children) {
30812
0
                    PyMem_Free(_children);
30813
0
                    p->error_indicator = 1;
30814
0
                    PyErr_NoMemory();
30815
0
                    p->level--;
30816
0
                    return NULL;
30817
0
                }
30818
9.53k
                _children = _new_children;
30819
9.53k
            }
30820
44.0k
            _children[_n++] = _res;
30821
44.0k
            _mark = p->mark;
30822
44.0k
        }
30823
37.3k
        p->mark = _mark;
30824
37.3k
        D(fprintf(stderr, "%*c%s _loop0_57[%d-%d]: %s failed!\n", p->level, ' ',
30825
37.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_named_expression"));
30826
37.3k
    }
30827
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30828
37.3k
    if (!_seq) {
30829
0
        PyMem_Free(_children);
30830
0
        p->error_indicator = 1;
30831
0
        PyErr_NoMemory();
30832
0
        p->level--;
30833
0
        return NULL;
30834
0
    }
30835
81.3k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
30836
37.3k
    PyMem_Free(_children);
30837
37.3k
    p->level--;
30838
37.3k
    return _seq;
30839
37.3k
}
30840
30841
// _gather_58: star_named_expression _loop0_57
30842
static asdl_seq *
30843
_gather_58_rule(Parser *p)
30844
92.9k
{
30845
92.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30846
1
        _Pypegen_stack_overflow(p);
30847
1
    }
30848
92.9k
    if (p->error_indicator) {
30849
1
        p->level--;
30850
1
        return NULL;
30851
1
    }
30852
92.9k
    asdl_seq * _res = NULL;
30853
92.9k
    int _mark = p->mark;
30854
92.9k
    { // star_named_expression _loop0_57
30855
92.9k
        if (p->error_indicator) {
30856
0
            p->level--;
30857
0
            return NULL;
30858
0
        }
30859
92.9k
        D(fprintf(stderr, "%*c> _gather_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_57"));
30860
92.9k
        expr_ty elem;
30861
92.9k
        asdl_seq * seq;
30862
92.9k
        if (
30863
92.9k
            (elem = star_named_expression_rule(p))  // star_named_expression
30864
92.9k
            &&
30865
92.9k
            (seq = _loop0_57_rule(p))  // _loop0_57
30866
92.9k
        )
30867
37.3k
        {
30868
37.3k
            D(fprintf(stderr, "%*c+ _gather_58[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_57"));
30869
37.3k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30870
37.3k
            goto done;
30871
37.3k
        }
30872
55.5k
        p->mark = _mark;
30873
55.5k
        D(fprintf(stderr, "%*c%s _gather_58[%d-%d]: %s failed!\n", p->level, ' ',
30874
55.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression _loop0_57"));
30875
55.5k
    }
30876
0
    _res = NULL;
30877
92.9k
  done:
30878
92.9k
    p->level--;
30879
92.9k
    return _res;
30880
55.5k
}
30881
30882
// _loop1_59: ('or' conjunction)
30883
static asdl_seq *
30884
_loop1_59_rule(Parser *p)
30885
349k
{
30886
349k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30887
0
        _Pypegen_stack_overflow(p);
30888
0
    }
30889
349k
    if (p->error_indicator) {
30890
0
        p->level--;
30891
0
        return NULL;
30892
0
    }
30893
349k
    void *_res = NULL;
30894
349k
    int _mark = p->mark;
30895
349k
    void **_children = PyMem_Malloc(sizeof(void *));
30896
349k
    if (!_children) {
30897
0
        p->error_indicator = 1;
30898
0
        PyErr_NoMemory();
30899
0
        p->level--;
30900
0
        return NULL;
30901
0
    }
30902
349k
    Py_ssize_t _children_capacity = 1;
30903
349k
    Py_ssize_t _n = 0;
30904
349k
    { // ('or' conjunction)
30905
349k
        if (p->error_indicator) {
30906
0
            p->level--;
30907
0
            return NULL;
30908
0
        }
30909
349k
        D(fprintf(stderr, "%*c> _loop1_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)"));
30910
349k
        void *_tmp_158_var;
30911
349k
        while (
30912
353k
            (_tmp_158_var = _tmp_158_rule(p))  // 'or' conjunction
30913
349k
        )
30914
3.92k
        {
30915
3.92k
            _res = _tmp_158_var;
30916
3.92k
            if (_n == _children_capacity) {
30917
705
                _children_capacity *= 2;
30918
705
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30919
705
                if (!_new_children) {
30920
0
                    PyMem_Free(_children);
30921
0
                    p->error_indicator = 1;
30922
0
                    PyErr_NoMemory();
30923
0
                    p->level--;
30924
0
                    return NULL;
30925
0
                }
30926
705
                _children = _new_children;
30927
705
            }
30928
3.92k
            _children[_n++] = _res;
30929
3.92k
            _mark = p->mark;
30930
3.92k
        }
30931
349k
        p->mark = _mark;
30932
349k
        D(fprintf(stderr, "%*c%s _loop1_59[%d-%d]: %s failed!\n", p->level, ' ',
30933
349k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('or' conjunction)"));
30934
349k
    }
30935
349k
    if (_n == 0 || p->error_indicator) {
30936
348k
        PyMem_Free(_children);
30937
348k
        p->level--;
30938
348k
        return NULL;
30939
348k
    }
30940
1.20k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30941
1.20k
    if (!_seq) {
30942
0
        PyMem_Free(_children);
30943
0
        p->error_indicator = 1;
30944
0
        PyErr_NoMemory();
30945
0
        p->level--;
30946
0
        return NULL;
30947
0
    }
30948
5.04k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
30949
1.20k
    PyMem_Free(_children);
30950
1.20k
    p->level--;
30951
1.20k
    return _seq;
30952
1.20k
}
30953
30954
// _loop1_60: ('and' inversion)
30955
static asdl_seq *
30956
_loop1_60_rule(Parser *p)
30957
353k
{
30958
353k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
30959
0
        _Pypegen_stack_overflow(p);
30960
0
    }
30961
353k
    if (p->error_indicator) {
30962
0
        p->level--;
30963
0
        return NULL;
30964
0
    }
30965
353k
    void *_res = NULL;
30966
353k
    int _mark = p->mark;
30967
353k
    void **_children = PyMem_Malloc(sizeof(void *));
30968
353k
    if (!_children) {
30969
0
        p->error_indicator = 1;
30970
0
        PyErr_NoMemory();
30971
0
        p->level--;
30972
0
        return NULL;
30973
0
    }
30974
353k
    Py_ssize_t _children_capacity = 1;
30975
353k
    Py_ssize_t _n = 0;
30976
353k
    { // ('and' inversion)
30977
353k
        if (p->error_indicator) {
30978
0
            p->level--;
30979
0
            return NULL;
30980
0
        }
30981
353k
        D(fprintf(stderr, "%*c> _loop1_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)"));
30982
353k
        void *_tmp_159_var;
30983
353k
        while (
30984
356k
            (_tmp_159_var = _tmp_159_rule(p))  // 'and' inversion
30985
353k
        )
30986
2.91k
        {
30987
2.91k
            _res = _tmp_159_var;
30988
2.91k
            if (_n == _children_capacity) {
30989
878
                _children_capacity *= 2;
30990
878
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30991
878
                if (!_new_children) {
30992
0
                    PyMem_Free(_children);
30993
0
                    p->error_indicator = 1;
30994
0
                    PyErr_NoMemory();
30995
0
                    p->level--;
30996
0
                    return NULL;
30997
0
                }
30998
878
                _children = _new_children;
30999
878
            }
31000
2.91k
            _children[_n++] = _res;
31001
2.91k
            _mark = p->mark;
31002
2.91k
        }
31003
353k
        p->mark = _mark;
31004
353k
        D(fprintf(stderr, "%*c%s _loop1_60[%d-%d]: %s failed!\n", p->level, ' ',
31005
353k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('and' inversion)"));
31006
353k
    }
31007
353k
    if (_n == 0 || p->error_indicator) {
31008
351k
        PyMem_Free(_children);
31009
351k
        p->level--;
31010
351k
        return NULL;
31011
351k
    }
31012
1.48k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31013
1.48k
    if (!_seq) {
31014
0
        PyMem_Free(_children);
31015
0
        p->error_indicator = 1;
31016
0
        PyErr_NoMemory();
31017
0
        p->level--;
31018
0
        return NULL;
31019
0
    }
31020
4.21k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
31021
1.48k
    PyMem_Free(_children);
31022
1.48k
    p->level--;
31023
1.48k
    return _seq;
31024
1.48k
}
31025
31026
// _loop1_61: compare_op_bitwise_or_pair
31027
static asdl_seq *
31028
_loop1_61_rule(Parser *p)
31029
357k
{
31030
357k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31031
0
        _Pypegen_stack_overflow(p);
31032
0
    }
31033
357k
    if (p->error_indicator) {
31034
0
        p->level--;
31035
0
        return NULL;
31036
0
    }
31037
357k
    void *_res = NULL;
31038
357k
    int _mark = p->mark;
31039
357k
    void **_children = PyMem_Malloc(sizeof(void *));
31040
357k
    if (!_children) {
31041
0
        p->error_indicator = 1;
31042
0
        PyErr_NoMemory();
31043
0
        p->level--;
31044
0
        return NULL;
31045
0
    }
31046
357k
    Py_ssize_t _children_capacity = 1;
31047
357k
    Py_ssize_t _n = 0;
31048
357k
    { // compare_op_bitwise_or_pair
31049
357k
        if (p->error_indicator) {
31050
0
            p->level--;
31051
0
            return NULL;
31052
0
        }
31053
357k
        D(fprintf(stderr, "%*c> _loop1_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair"));
31054
357k
        CmpopExprPair* compare_op_bitwise_or_pair_var;
31055
357k
        while (
31056
377k
            (compare_op_bitwise_or_pair_var = compare_op_bitwise_or_pair_rule(p))  // compare_op_bitwise_or_pair
31057
357k
        )
31058
19.4k
        {
31059
19.4k
            _res = compare_op_bitwise_or_pair_var;
31060
19.4k
            if (_n == _children_capacity) {
31061
3.71k
                _children_capacity *= 2;
31062
3.71k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31063
3.71k
                if (!_new_children) {
31064
0
                    PyMem_Free(_children);
31065
0
                    p->error_indicator = 1;
31066
0
                    PyErr_NoMemory();
31067
0
                    p->level--;
31068
0
                    return NULL;
31069
0
                }
31070
3.71k
                _children = _new_children;
31071
3.71k
            }
31072
19.4k
            _children[_n++] = _res;
31073
19.4k
            _mark = p->mark;
31074
19.4k
        }
31075
357k
        p->mark = _mark;
31076
357k
        D(fprintf(stderr, "%*c%s _loop1_61[%d-%d]: %s failed!\n", p->level, ' ',
31077
357k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compare_op_bitwise_or_pair"));
31078
357k
    }
31079
357k
    if (_n == 0 || p->error_indicator) {
31080
348k
        PyMem_Free(_children);
31081
348k
        p->level--;
31082
348k
        return NULL;
31083
348k
    }
31084
9.75k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31085
9.75k
    if (!_seq) {
31086
0
        PyMem_Free(_children);
31087
0
        p->error_indicator = 1;
31088
0
        PyErr_NoMemory();
31089
0
        p->level--;
31090
0
        return NULL;
31091
0
    }
31092
28.5k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
31093
9.75k
    PyMem_Free(_children);
31094
9.75k
    p->level--;
31095
9.75k
    return _seq;
31096
9.75k
}
31097
31098
// _tmp_62: '!='
31099
static void *
31100
_tmp_62_rule(Parser *p)
31101
375k
{
31102
375k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31103
0
        _Pypegen_stack_overflow(p);
31104
0
    }
31105
375k
    if (p->error_indicator) {
31106
0
        p->level--;
31107
0
        return NULL;
31108
0
    }
31109
375k
    void * _res = NULL;
31110
375k
    int _mark = p->mark;
31111
375k
    { // '!='
31112
375k
        if (p->error_indicator) {
31113
0
            p->level--;
31114
0
            return NULL;
31115
0
        }
31116
375k
        D(fprintf(stderr, "%*c> _tmp_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='"));
31117
375k
        Token * tok;
31118
375k
        if (
31119
375k
            (tok = _PyPegen_expect_token(p, 28))  // token='!='
31120
375k
        )
31121
1.27k
        {
31122
1.27k
            D(fprintf(stderr, "%*c+ _tmp_62[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!='"));
31123
1.27k
            _res = _PyPegen_check_barry_as_flufl ( p , tok ) ? NULL : tok;
31124
1.27k
            if (_res == NULL && PyErr_Occurred()) {
31125
1
                p->error_indicator = 1;
31126
1
                p->level--;
31127
1
                return NULL;
31128
1
            }
31129
1.27k
            goto done;
31130
1.27k
        }
31131
374k
        p->mark = _mark;
31132
374k
        D(fprintf(stderr, "%*c%s _tmp_62[%d-%d]: %s failed!\n", p->level, ' ',
31133
374k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!='"));
31134
374k
    }
31135
0
    _res = NULL;
31136
375k
  done:
31137
375k
    p->level--;
31138
375k
    return _res;
31139
374k
}
31140
31141
// _loop0_63: ',' (slice | starred_expression)
31142
static asdl_seq *
31143
_loop0_63_rule(Parser *p)
31144
2.60k
{
31145
2.60k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31146
0
        _Pypegen_stack_overflow(p);
31147
0
    }
31148
2.60k
    if (p->error_indicator) {
31149
0
        p->level--;
31150
0
        return NULL;
31151
0
    }
31152
2.60k
    void *_res = NULL;
31153
2.60k
    int _mark = p->mark;
31154
2.60k
    void **_children = PyMem_Malloc(sizeof(void *));
31155
2.60k
    if (!_children) {
31156
0
        p->error_indicator = 1;
31157
0
        PyErr_NoMemory();
31158
0
        p->level--;
31159
0
        return NULL;
31160
0
    }
31161
2.60k
    Py_ssize_t _children_capacity = 1;
31162
2.60k
    Py_ssize_t _n = 0;
31163
2.60k
    { // ',' (slice | starred_expression)
31164
2.60k
        if (p->error_indicator) {
31165
0
            p->level--;
31166
0
            return NULL;
31167
0
        }
31168
2.60k
        D(fprintf(stderr, "%*c> _loop0_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (slice | starred_expression)"));
31169
2.60k
        Token * _literal;
31170
2.60k
        void *elem;
31171
2.60k
        while (
31172
29.0k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
31173
29.0k
            &&
31174
29.0k
            (elem = _tmp_160_rule(p))  // slice | starred_expression
31175
2.60k
        )
31176
26.4k
        {
31177
26.4k
            _res = elem;
31178
26.4k
            if (_res == NULL && PyErr_Occurred()) {
31179
0
                p->error_indicator = 1;
31180
0
                PyMem_Free(_children);
31181
0
                p->level--;
31182
0
                return NULL;
31183
0
            }
31184
26.4k
            if (_n == _children_capacity) {
31185
1.86k
                _children_capacity *= 2;
31186
1.86k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31187
1.86k
                if (!_new_children) {
31188
0
                    PyMem_Free(_children);
31189
0
                    p->error_indicator = 1;
31190
0
                    PyErr_NoMemory();
31191
0
                    p->level--;
31192
0
                    return NULL;
31193
0
                }
31194
1.86k
                _children = _new_children;
31195
1.86k
            }
31196
26.4k
            _children[_n++] = _res;
31197
26.4k
            _mark = p->mark;
31198
26.4k
        }
31199
2.60k
        p->mark = _mark;
31200
2.60k
        D(fprintf(stderr, "%*c%s _loop0_63[%d-%d]: %s failed!\n", p->level, ' ',
31201
2.60k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (slice | starred_expression)"));
31202
2.60k
    }
31203
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31204
2.60k
    if (!_seq) {
31205
0
        PyMem_Free(_children);
31206
0
        p->error_indicator = 1;
31207
0
        PyErr_NoMemory();
31208
0
        p->level--;
31209
0
        return NULL;
31210
0
    }
31211
29.0k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
31212
2.60k
    PyMem_Free(_children);
31213
2.60k
    p->level--;
31214
2.60k
    return _seq;
31215
2.60k
}
31216
31217
// _gather_64: (slice | starred_expression) _loop0_63
31218
static asdl_seq *
31219
_gather_64_rule(Parser *p)
31220
4.39k
{
31221
4.39k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31222
0
        _Pypegen_stack_overflow(p);
31223
0
    }
31224
4.39k
    if (p->error_indicator) {
31225
0
        p->level--;
31226
0
        return NULL;
31227
0
    }
31228
4.39k
    asdl_seq * _res = NULL;
31229
4.39k
    int _mark = p->mark;
31230
4.39k
    { // (slice | starred_expression) _loop0_63
31231
4.39k
        if (p->error_indicator) {
31232
0
            p->level--;
31233
0
            return NULL;
31234
0
        }
31235
4.39k
        D(fprintf(stderr, "%*c> _gather_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_63"));
31236
4.39k
        void *elem;
31237
4.39k
        asdl_seq * seq;
31238
4.39k
        if (
31239
4.39k
            (elem = _tmp_160_rule(p))  // slice | starred_expression
31240
4.39k
            &&
31241
4.39k
            (seq = _loop0_63_rule(p))  // _loop0_63
31242
4.39k
        )
31243
2.60k
        {
31244
2.60k
            D(fprintf(stderr, "%*c+ _gather_64[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_63"));
31245
2.60k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
31246
2.60k
            goto done;
31247
2.60k
        }
31248
1.79k
        p->mark = _mark;
31249
1.79k
        D(fprintf(stderr, "%*c%s _gather_64[%d-%d]: %s failed!\n", p->level, ' ',
31250
1.79k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(slice | starred_expression) _loop0_63"));
31251
1.79k
    }
31252
0
    _res = NULL;
31253
4.39k
  done:
31254
4.39k
    p->level--;
31255
4.39k
    return _res;
31256
1.79k
}
31257
31258
// _tmp_65: ':' expression?
31259
static void *
31260
_tmp_65_rule(Parser *p)
31261
24.4k
{
31262
24.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31263
0
        _Pypegen_stack_overflow(p);
31264
0
    }
31265
24.4k
    if (p->error_indicator) {
31266
0
        p->level--;
31267
0
        return NULL;
31268
0
    }
31269
24.4k
    void * _res = NULL;
31270
24.4k
    int _mark = p->mark;
31271
24.4k
    { // ':' expression?
31272
24.4k
        if (p->error_indicator) {
31273
0
            p->level--;
31274
0
            return NULL;
31275
0
        }
31276
24.4k
        D(fprintf(stderr, "%*c> _tmp_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?"));
31277
24.4k
        Token * _literal;
31278
24.4k
        void *d;
31279
24.4k
        if (
31280
24.4k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
31281
24.4k
            &&
31282
24.4k
            (d = expression_rule(p), !p->error_indicator)  // expression?
31283
24.4k
        )
31284
3.10k
        {
31285
3.10k
            D(fprintf(stderr, "%*c+ _tmp_65[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression?"));
31286
3.10k
            _res = d;
31287
3.10k
            if (_res == NULL && PyErr_Occurred()) {
31288
0
                p->error_indicator = 1;
31289
0
                p->level--;
31290
0
                return NULL;
31291
0
            }
31292
3.10k
            goto done;
31293
3.10k
        }
31294
21.3k
        p->mark = _mark;
31295
21.3k
        D(fprintf(stderr, "%*c%s _tmp_65[%d-%d]: %s failed!\n", p->level, ' ',
31296
21.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression?"));
31297
21.3k
    }
31298
0
    _res = NULL;
31299
24.4k
  done:
31300
24.4k
    p->level--;
31301
24.4k
    return _res;
31302
21.3k
}
31303
31304
// _tmp_66: tuple | group | genexp
31305
static void *
31306
_tmp_66_rule(Parser *p)
31307
72.0k
{
31308
72.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31309
0
        _Pypegen_stack_overflow(p);
31310
0
    }
31311
72.0k
    if (p->error_indicator) {
31312
0
        p->level--;
31313
0
        return NULL;
31314
0
    }
31315
72.0k
    void * _res = NULL;
31316
72.0k
    int _mark = p->mark;
31317
72.0k
    { // tuple
31318
72.0k
        if (p->error_indicator) {
31319
0
            p->level--;
31320
0
            return NULL;
31321
0
        }
31322
72.0k
        D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
31323
72.0k
        expr_ty tuple_var;
31324
72.0k
        if (
31325
72.0k
            (tuple_var = tuple_rule(p))  // tuple
31326
72.0k
        )
31327
35.8k
        {
31328
35.8k
            D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple"));
31329
35.8k
            _res = tuple_var;
31330
35.8k
            goto done;
31331
35.8k
        }
31332
36.1k
        p->mark = _mark;
31333
36.1k
        D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ',
31334
36.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple"));
31335
36.1k
    }
31336
0
    { // group
31337
36.1k
        if (p->error_indicator) {
31338
6.09k
            p->level--;
31339
6.09k
            return NULL;
31340
6.09k
        }
31341
30.0k
        D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group"));
31342
30.0k
        expr_ty group_var;
31343
30.0k
        if (
31344
30.0k
            (group_var = group_rule(p))  // group
31345
30.0k
        )
31346
7.03k
        {
31347
7.03k
            D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group"));
31348
7.03k
            _res = group_var;
31349
7.03k
            goto done;
31350
7.03k
        }
31351
22.9k
        p->mark = _mark;
31352
22.9k
        D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ',
31353
22.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group"));
31354
22.9k
    }
31355
0
    { // genexp
31356
22.9k
        if (p->error_indicator) {
31357
648
            p->level--;
31358
648
            return NULL;
31359
648
        }
31360
22.3k
        D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp"));
31361
22.3k
        expr_ty genexp_var;
31362
22.3k
        if (
31363
22.3k
            (genexp_var = genexp_rule(p))  // genexp
31364
22.3k
        )
31365
2.68k
        {
31366
2.68k
            D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp"));
31367
2.68k
            _res = genexp_var;
31368
2.68k
            goto done;
31369
2.68k
        }
31370
19.6k
        p->mark = _mark;
31371
19.6k
        D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ',
31372
19.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp"));
31373
19.6k
    }
31374
0
    _res = NULL;
31375
65.2k
  done:
31376
65.2k
    p->level--;
31377
65.2k
    return _res;
31378
19.6k
}
31379
31380
// _tmp_67: list | listcomp
31381
static void *
31382
_tmp_67_rule(Parser *p)
31383
53.7k
{
31384
53.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31385
0
        _Pypegen_stack_overflow(p);
31386
0
    }
31387
53.7k
    if (p->error_indicator) {
31388
0
        p->level--;
31389
0
        return NULL;
31390
0
    }
31391
53.7k
    void * _res = NULL;
31392
53.7k
    int _mark = p->mark;
31393
53.7k
    { // list
31394
53.7k
        if (p->error_indicator) {
31395
0
            p->level--;
31396
0
            return NULL;
31397
0
        }
31398
53.7k
        D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
31399
53.7k
        expr_ty list_var;
31400
53.7k
        if (
31401
53.7k
            (list_var = list_rule(p))  // list
31402
53.7k
        )
31403
14.1k
        {
31404
14.1k
            D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list"));
31405
14.1k
            _res = list_var;
31406
14.1k
            goto done;
31407
14.1k
        }
31408
39.6k
        p->mark = _mark;
31409
39.6k
        D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ',
31410
39.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list"));
31411
39.6k
    }
31412
0
    { // listcomp
31413
39.6k
        if (p->error_indicator) {
31414
10.7k
            p->level--;
31415
10.7k
            return NULL;
31416
10.7k
        }
31417
28.8k
        D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp"));
31418
28.8k
        expr_ty listcomp_var;
31419
28.8k
        if (
31420
28.8k
            (listcomp_var = listcomp_rule(p))  // listcomp
31421
28.8k
        )
31422
1.35k
        {
31423
1.35k
            D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "listcomp"));
31424
1.35k
            _res = listcomp_var;
31425
1.35k
            goto done;
31426
1.35k
        }
31427
27.5k
        p->mark = _mark;
31428
27.5k
        D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ',
31429
27.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "listcomp"));
31430
27.5k
    }
31431
0
    _res = NULL;
31432
42.9k
  done:
31433
42.9k
    p->level--;
31434
42.9k
    return _res;
31435
27.5k
}
31436
31437
// _tmp_68: dict | set | dictcomp | setcomp
31438
static void *
31439
_tmp_68_rule(Parser *p)
31440
24.6k
{
31441
24.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31442
0
        _Pypegen_stack_overflow(p);
31443
0
    }
31444
24.6k
    if (p->error_indicator) {
31445
0
        p->level--;
31446
0
        return NULL;
31447
0
    }
31448
24.6k
    void * _res = NULL;
31449
24.6k
    int _mark = p->mark;
31450
24.6k
    { // dict
31451
24.6k
        if (p->error_indicator) {
31452
0
            p->level--;
31453
0
            return NULL;
31454
0
        }
31455
24.6k
        D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict"));
31456
24.6k
        expr_ty dict_var;
31457
24.6k
        if (
31458
24.6k
            (dict_var = dict_rule(p))  // dict
31459
24.6k
        )
31460
4.42k
        {
31461
4.42k
            D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dict"));
31462
4.42k
            _res = dict_var;
31463
4.42k
            goto done;
31464
4.42k
        }
31465
20.2k
        p->mark = _mark;
31466
20.2k
        D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ',
31467
20.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dict"));
31468
20.2k
    }
31469
0
    { // set
31470
20.2k
        if (p->error_indicator) {
31471
9.05k
            p->level--;
31472
9.05k
            return NULL;
31473
9.05k
        }
31474
11.1k
        D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set"));
31475
11.1k
        expr_ty set_var;
31476
11.1k
        if (
31477
11.1k
            (set_var = set_rule(p))  // set
31478
11.1k
        )
31479
1.14k
        {
31480
1.14k
            D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "set"));
31481
1.14k
            _res = set_var;
31482
1.14k
            goto done;
31483
1.14k
        }
31484
10.0k
        p->mark = _mark;
31485
10.0k
        D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ',
31486
10.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "set"));
31487
10.0k
    }
31488
0
    { // dictcomp
31489
10.0k
        if (p->error_indicator) {
31490
285
            p->level--;
31491
285
            return NULL;
31492
285
        }
31493
9.76k
        D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp"));
31494
9.76k
        expr_ty dictcomp_var;
31495
9.76k
        if (
31496
9.76k
            (dictcomp_var = dictcomp_rule(p))  // dictcomp
31497
9.76k
        )
31498
1.22k
        {
31499
1.22k
            D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dictcomp"));
31500
1.22k
            _res = dictcomp_var;
31501
1.22k
            goto done;
31502
1.22k
        }
31503
8.54k
        p->mark = _mark;
31504
8.54k
        D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ',
31505
8.54k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dictcomp"));
31506
8.54k
    }
31507
0
    { // setcomp
31508
8.54k
        if (p->error_indicator) {
31509
200
            p->level--;
31510
200
            return NULL;
31511
200
        }
31512
8.34k
        D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp"));
31513
8.34k
        expr_ty setcomp_var;
31514
8.34k
        if (
31515
8.34k
            (setcomp_var = setcomp_rule(p))  // setcomp
31516
8.34k
        )
31517
196
        {
31518
196
            D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "setcomp"));
31519
196
            _res = setcomp_var;
31520
196
            goto done;
31521
196
        }
31522
8.14k
        p->mark = _mark;
31523
8.14k
        D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ',
31524
8.14k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "setcomp"));
31525
8.14k
    }
31526
0
    _res = NULL;
31527
15.1k
  done:
31528
15.1k
    p->level--;
31529
15.1k
    return _res;
31530
8.14k
}
31531
31532
// _tmp_69: yield_expr | named_expression
31533
static void *
31534
_tmp_69_rule(Parser *p)
31535
30.0k
{
31536
30.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31537
0
        _Pypegen_stack_overflow(p);
31538
0
    }
31539
30.0k
    if (p->error_indicator) {
31540
0
        p->level--;
31541
0
        return NULL;
31542
0
    }
31543
30.0k
    void * _res = NULL;
31544
30.0k
    int _mark = p->mark;
31545
30.0k
    { // yield_expr
31546
30.0k
        if (p->error_indicator) {
31547
0
            p->level--;
31548
0
            return NULL;
31549
0
        }
31550
30.0k
        D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
31551
30.0k
        expr_ty yield_expr_var;
31552
30.0k
        if (
31553
30.0k
            (yield_expr_var = yield_expr_rule(p))  // yield_expr
31554
30.0k
        )
31555
556
        {
31556
556
            D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
31557
556
            _res = yield_expr_var;
31558
556
            goto done;
31559
556
        }
31560
29.4k
        p->mark = _mark;
31561
29.4k
        D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ',
31562
29.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
31563
29.4k
    }
31564
0
    { // named_expression
31565
29.4k
        if (p->error_indicator) {
31566
288
            p->level--;
31567
288
            return NULL;
31568
288
        }
31569
29.1k
        D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
31570
29.1k
        expr_ty named_expression_var;
31571
29.1k
        if (
31572
29.1k
            (named_expression_var = named_expression_rule(p))  // named_expression
31573
29.1k
        )
31574
18.7k
        {
31575
18.7k
            D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
31576
18.7k
            _res = named_expression_var;
31577
18.7k
            goto done;
31578
18.7k
        }
31579
10.4k
        p->mark = _mark;
31580
10.4k
        D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ',
31581
10.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
31582
10.4k
    }
31583
0
    _res = NULL;
31584
29.7k
  done:
31585
29.7k
    p->level--;
31586
29.7k
    return _res;
31587
10.4k
}
31588
31589
// _loop0_70: lambda_param_no_default
31590
static asdl_seq *
31591
_loop0_70_rule(Parser *p)
31592
77.9k
{
31593
77.9k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31594
0
        _Pypegen_stack_overflow(p);
31595
0
    }
31596
77.9k
    if (p->error_indicator) {
31597
0
        p->level--;
31598
0
        return NULL;
31599
0
    }
31600
77.9k
    void *_res = NULL;
31601
77.9k
    int _mark = p->mark;
31602
77.9k
    void **_children = PyMem_Malloc(sizeof(void *));
31603
77.9k
    if (!_children) {
31604
0
        p->error_indicator = 1;
31605
0
        PyErr_NoMemory();
31606
0
        p->level--;
31607
0
        return NULL;
31608
0
    }
31609
77.9k
    Py_ssize_t _children_capacity = 1;
31610
77.9k
    Py_ssize_t _n = 0;
31611
77.9k
    { // lambda_param_no_default
31612
77.9k
        if (p->error_indicator) {
31613
0
            p->level--;
31614
0
            return NULL;
31615
0
        }
31616
77.9k
        D(fprintf(stderr, "%*c> _loop0_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
31617
77.9k
        arg_ty lambda_param_no_default_var;
31618
77.9k
        while (
31619
140k
            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
31620
77.9k
        )
31621
62.2k
        {
31622
62.2k
            _res = lambda_param_no_default_var;
31623
62.2k
            if (_n == _children_capacity) {
31624
3.56k
                _children_capacity *= 2;
31625
3.56k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31626
3.56k
                if (!_new_children) {
31627
0
                    PyMem_Free(_children);
31628
0
                    p->error_indicator = 1;
31629
0
                    PyErr_NoMemory();
31630
0
                    p->level--;
31631
0
                    return NULL;
31632
0
                }
31633
3.56k
                _children = _new_children;
31634
3.56k
            }
31635
62.2k
            _children[_n++] = _res;
31636
62.2k
            _mark = p->mark;
31637
62.2k
        }
31638
77.9k
        p->mark = _mark;
31639
77.9k
        D(fprintf(stderr, "%*c%s _loop0_70[%d-%d]: %s failed!\n", p->level, ' ',
31640
77.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
31641
77.9k
    }
31642
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31643
77.9k
    if (!_seq) {
31644
0
        PyMem_Free(_children);
31645
0
        p->error_indicator = 1;
31646
0
        PyErr_NoMemory();
31647
0
        p->level--;
31648
0
        return NULL;
31649
0
    }
31650
140k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
31651
77.9k
    PyMem_Free(_children);
31652
77.9k
    p->level--;
31653
77.9k
    return _seq;
31654
77.9k
}
31655
31656
// _loop0_71: lambda_param_with_default
31657
static asdl_seq *
31658
_loop0_71_rule(Parser *p)
31659
3.07k
{
31660
3.07k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31661
0
        _Pypegen_stack_overflow(p);
31662
0
    }
31663
3.07k
    if (p->error_indicator) {
31664
2
        p->level--;
31665
2
        return NULL;
31666
2
    }
31667
3.06k
    void *_res = NULL;
31668
3.06k
    int _mark = p->mark;
31669
3.06k
    void **_children = PyMem_Malloc(sizeof(void *));
31670
3.06k
    if (!_children) {
31671
0
        p->error_indicator = 1;
31672
0
        PyErr_NoMemory();
31673
0
        p->level--;
31674
0
        return NULL;
31675
0
    }
31676
3.06k
    Py_ssize_t _children_capacity = 1;
31677
3.06k
    Py_ssize_t _n = 0;
31678
3.06k
    { // lambda_param_with_default
31679
3.06k
        if (p->error_indicator) {
31680
0
            p->level--;
31681
0
            return NULL;
31682
0
        }
31683
3.06k
        D(fprintf(stderr, "%*c> _loop0_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
31684
3.06k
        NameDefaultPair* lambda_param_with_default_var;
31685
3.06k
        while (
31686
4.51k
            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
31687
3.06k
        )
31688
1.44k
        {
31689
1.44k
            _res = lambda_param_with_default_var;
31690
1.44k
            if (_n == _children_capacity) {
31691
456
                _children_capacity *= 2;
31692
456
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31693
456
                if (!_new_children) {
31694
0
                    PyMem_Free(_children);
31695
0
                    p->error_indicator = 1;
31696
0
                    PyErr_NoMemory();
31697
0
                    p->level--;
31698
0
                    return NULL;
31699
0
                }
31700
456
                _children = _new_children;
31701
456
            }
31702
1.44k
            _children[_n++] = _res;
31703
1.44k
            _mark = p->mark;
31704
1.44k
        }
31705
3.06k
        p->mark = _mark;
31706
3.06k
        D(fprintf(stderr, "%*c%s _loop0_71[%d-%d]: %s failed!\n", p->level, ' ',
31707
3.06k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
31708
3.06k
    }
31709
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31710
3.06k
    if (!_seq) {
31711
0
        PyMem_Free(_children);
31712
0
        p->error_indicator = 1;
31713
0
        PyErr_NoMemory();
31714
0
        p->level--;
31715
0
        return NULL;
31716
0
    }
31717
4.51k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
31718
3.06k
    PyMem_Free(_children);
31719
3.06k
    p->level--;
31720
3.06k
    return _seq;
31721
3.06k
}
31722
31723
// _loop1_72: lambda_param_no_default
31724
static asdl_seq *
31725
_loop1_72_rule(Parser *p)
31726
77.0k
{
31727
77.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31728
0
        _Pypegen_stack_overflow(p);
31729
0
    }
31730
77.0k
    if (p->error_indicator) {
31731
0
        p->level--;
31732
0
        return NULL;
31733
0
    }
31734
77.0k
    void *_res = NULL;
31735
77.0k
    int _mark = p->mark;
31736
77.0k
    void **_children = PyMem_Malloc(sizeof(void *));
31737
77.0k
    if (!_children) {
31738
0
        p->error_indicator = 1;
31739
0
        PyErr_NoMemory();
31740
0
        p->level--;
31741
0
        return NULL;
31742
0
    }
31743
77.0k
    Py_ssize_t _children_capacity = 1;
31744
77.0k
    Py_ssize_t _n = 0;
31745
77.0k
    { // lambda_param_no_default
31746
77.0k
        if (p->error_indicator) {
31747
0
            p->level--;
31748
0
            return NULL;
31749
0
        }
31750
77.0k
        D(fprintf(stderr, "%*c> _loop1_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
31751
77.0k
        arg_ty lambda_param_no_default_var;
31752
77.0k
        while (
31753
160k
            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
31754
77.0k
        )
31755
83.2k
        {
31756
83.2k
            _res = lambda_param_no_default_var;
31757
83.2k
            if (_n == _children_capacity) {
31758
6.11k
                _children_capacity *= 2;
31759
6.11k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31760
6.11k
                if (!_new_children) {
31761
0
                    PyMem_Free(_children);
31762
0
                    p->error_indicator = 1;
31763
0
                    PyErr_NoMemory();
31764
0
                    p->level--;
31765
0
                    return NULL;
31766
0
                }
31767
6.11k
                _children = _new_children;
31768
6.11k
            }
31769
83.2k
            _children[_n++] = _res;
31770
83.2k
            _mark = p->mark;
31771
83.2k
        }
31772
77.0k
        p->mark = _mark;
31773
77.0k
        D(fprintf(stderr, "%*c%s _loop1_72[%d-%d]: %s failed!\n", p->level, ' ',
31774
77.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
31775
77.0k
    }
31776
77.0k
    if (_n == 0 || p->error_indicator) {
31777
64.7k
        PyMem_Free(_children);
31778
64.7k
        p->level--;
31779
64.7k
        return NULL;
31780
64.7k
    }
31781
12.2k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31782
12.2k
    if (!_seq) {
31783
0
        PyMem_Free(_children);
31784
0
        p->error_indicator = 1;
31785
0
        PyErr_NoMemory();
31786
0
        p->level--;
31787
0
        return NULL;
31788
0
    }
31789
95.5k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
31790
12.2k
    PyMem_Free(_children);
31791
12.2k
    p->level--;
31792
12.2k
    return _seq;
31793
12.2k
}
31794
31795
// _loop1_73: lambda_param_with_default
31796
static asdl_seq *
31797
_loop1_73_rule(Parser *p)
31798
77.7k
{
31799
77.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31800
0
        _Pypegen_stack_overflow(p);
31801
0
    }
31802
77.7k
    if (p->error_indicator) {
31803
0
        p->level--;
31804
0
        return NULL;
31805
0
    }
31806
77.7k
    void *_res = NULL;
31807
77.7k
    int _mark = p->mark;
31808
77.7k
    void **_children = PyMem_Malloc(sizeof(void *));
31809
77.7k
    if (!_children) {
31810
0
        p->error_indicator = 1;
31811
0
        PyErr_NoMemory();
31812
0
        p->level--;
31813
0
        return NULL;
31814
0
    }
31815
77.7k
    Py_ssize_t _children_capacity = 1;
31816
77.7k
    Py_ssize_t _n = 0;
31817
77.7k
    { // lambda_param_with_default
31818
77.7k
        if (p->error_indicator) {
31819
0
            p->level--;
31820
0
            return NULL;
31821
0
        }
31822
77.7k
        D(fprintf(stderr, "%*c> _loop1_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
31823
77.7k
        NameDefaultPair* lambda_param_with_default_var;
31824
77.7k
        while (
31825
103k
            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
31826
77.7k
        )
31827
25.8k
        {
31828
25.8k
            _res = lambda_param_with_default_var;
31829
25.8k
            if (_n == _children_capacity) {
31830
3.29k
                _children_capacity *= 2;
31831
3.29k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31832
3.29k
                if (!_new_children) {
31833
0
                    PyMem_Free(_children);
31834
0
                    p->error_indicator = 1;
31835
0
                    PyErr_NoMemory();
31836
0
                    p->level--;
31837
0
                    return NULL;
31838
0
                }
31839
3.29k
                _children = _new_children;
31840
3.29k
            }
31841
25.8k
            _children[_n++] = _res;
31842
25.8k
            _mark = p->mark;
31843
25.8k
        }
31844
77.7k
        p->mark = _mark;
31845
77.7k
        D(fprintf(stderr, "%*c%s _loop1_73[%d-%d]: %s failed!\n", p->level, ' ',
31846
77.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
31847
77.7k
    }
31848
77.7k
    if (_n == 0 || p->error_indicator) {
31849
57.2k
        PyMem_Free(_children);
31850
57.2k
        p->level--;
31851
57.2k
        return NULL;
31852
57.2k
    }
31853
20.4k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31854
20.4k
    if (!_seq) {
31855
0
        PyMem_Free(_children);
31856
0
        p->error_indicator = 1;
31857
0
        PyErr_NoMemory();
31858
0
        p->level--;
31859
0
        return NULL;
31860
0
    }
31861
46.0k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
31862
20.4k
    PyMem_Free(_children);
31863
20.4k
    p->level--;
31864
20.4k
    return _seq;
31865
20.4k
}
31866
31867
// _loop0_74: lambda_param_maybe_default
31868
static asdl_seq *
31869
_loop0_74_rule(Parser *p)
31870
13.6k
{
31871
13.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31872
0
        _Pypegen_stack_overflow(p);
31873
0
    }
31874
13.6k
    if (p->error_indicator) {
31875
0
        p->level--;
31876
0
        return NULL;
31877
0
    }
31878
13.6k
    void *_res = NULL;
31879
13.6k
    int _mark = p->mark;
31880
13.6k
    void **_children = PyMem_Malloc(sizeof(void *));
31881
13.6k
    if (!_children) {
31882
0
        p->error_indicator = 1;
31883
0
        PyErr_NoMemory();
31884
0
        p->level--;
31885
0
        return NULL;
31886
0
    }
31887
13.6k
    Py_ssize_t _children_capacity = 1;
31888
13.6k
    Py_ssize_t _n = 0;
31889
13.6k
    { // lambda_param_maybe_default
31890
13.6k
        if (p->error_indicator) {
31891
0
            p->level--;
31892
0
            return NULL;
31893
0
        }
31894
13.6k
        D(fprintf(stderr, "%*c> _loop0_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default"));
31895
13.6k
        NameDefaultPair* lambda_param_maybe_default_var;
31896
13.6k
        while (
31897
25.7k
            (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p))  // lambda_param_maybe_default
31898
13.6k
        )
31899
12.0k
        {
31900
12.0k
            _res = lambda_param_maybe_default_var;
31901
12.0k
            if (_n == _children_capacity) {
31902
1.46k
                _children_capacity *= 2;
31903
1.46k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31904
1.46k
                if (!_new_children) {
31905
0
                    PyMem_Free(_children);
31906
0
                    p->error_indicator = 1;
31907
0
                    PyErr_NoMemory();
31908
0
                    p->level--;
31909
0
                    return NULL;
31910
0
                }
31911
1.46k
                _children = _new_children;
31912
1.46k
            }
31913
12.0k
            _children[_n++] = _res;
31914
12.0k
            _mark = p->mark;
31915
12.0k
        }
31916
13.6k
        p->mark = _mark;
31917
13.6k
        D(fprintf(stderr, "%*c%s _loop0_74[%d-%d]: %s failed!\n", p->level, ' ',
31918
13.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default"));
31919
13.6k
    }
31920
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31921
13.6k
    if (!_seq) {
31922
0
        PyMem_Free(_children);
31923
0
        p->error_indicator = 1;
31924
0
        PyErr_NoMemory();
31925
0
        p->level--;
31926
0
        return NULL;
31927
0
    }
31928
25.7k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
31929
13.6k
    PyMem_Free(_children);
31930
13.6k
    p->level--;
31931
13.6k
    return _seq;
31932
13.6k
}
31933
31934
// _loop1_75: lambda_param_maybe_default
31935
static asdl_seq *
31936
_loop1_75_rule(Parser *p)
31937
9.41k
{
31938
9.41k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
31939
0
        _Pypegen_stack_overflow(p);
31940
0
    }
31941
9.41k
    if (p->error_indicator) {
31942
0
        p->level--;
31943
0
        return NULL;
31944
0
    }
31945
9.41k
    void *_res = NULL;
31946
9.41k
    int _mark = p->mark;
31947
9.41k
    void **_children = PyMem_Malloc(sizeof(void *));
31948
9.41k
    if (!_children) {
31949
0
        p->error_indicator = 1;
31950
0
        PyErr_NoMemory();
31951
0
        p->level--;
31952
0
        return NULL;
31953
0
    }
31954
9.41k
    Py_ssize_t _children_capacity = 1;
31955
9.41k
    Py_ssize_t _n = 0;
31956
9.41k
    { // lambda_param_maybe_default
31957
9.41k
        if (p->error_indicator) {
31958
0
            p->level--;
31959
0
            return NULL;
31960
0
        }
31961
9.41k
        D(fprintf(stderr, "%*c> _loop1_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default"));
31962
9.41k
        NameDefaultPair* lambda_param_maybe_default_var;
31963
9.41k
        while (
31964
18.9k
            (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p))  // lambda_param_maybe_default
31965
9.41k
        )
31966
9.54k
        {
31967
9.54k
            _res = lambda_param_maybe_default_var;
31968
9.54k
            if (_n == _children_capacity) {
31969
1.31k
                _children_capacity *= 2;
31970
1.31k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31971
1.31k
                if (!_new_children) {
31972
0
                    PyMem_Free(_children);
31973
0
                    p->error_indicator = 1;
31974
0
                    PyErr_NoMemory();
31975
0
                    p->level--;
31976
0
                    return NULL;
31977
0
                }
31978
1.31k
                _children = _new_children;
31979
1.31k
            }
31980
9.54k
            _children[_n++] = _res;
31981
9.54k
            _mark = p->mark;
31982
9.54k
        }
31983
9.41k
        p->mark = _mark;
31984
9.41k
        D(fprintf(stderr, "%*c%s _loop1_75[%d-%d]: %s failed!\n", p->level, ' ',
31985
9.41k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default"));
31986
9.41k
    }
31987
9.41k
    if (_n == 0 || p->error_indicator) {
31988
6.01k
        PyMem_Free(_children);
31989
6.01k
        p->level--;
31990
6.01k
        return NULL;
31991
6.01k
    }
31992
3.40k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31993
3.40k
    if (!_seq) {
31994
0
        PyMem_Free(_children);
31995
0
        p->error_indicator = 1;
31996
0
        PyErr_NoMemory();
31997
0
        p->level--;
31998
0
        return NULL;
31999
0
    }
32000
12.8k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32001
3.40k
    PyMem_Free(_children);
32002
3.40k
    p->level--;
32003
3.40k
    return _seq;
32004
3.40k
}
32005
32006
// _loop0_76: fstring_format_spec
32007
static asdl_seq *
32008
_loop0_76_rule(Parser *p)
32009
3.34k
{
32010
3.34k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32011
0
        _Pypegen_stack_overflow(p);
32012
0
    }
32013
3.34k
    if (p->error_indicator) {
32014
0
        p->level--;
32015
0
        return NULL;
32016
0
    }
32017
3.34k
    void *_res = NULL;
32018
3.34k
    int _mark = p->mark;
32019
3.34k
    void **_children = PyMem_Malloc(sizeof(void *));
32020
3.34k
    if (!_children) {
32021
0
        p->error_indicator = 1;
32022
0
        PyErr_NoMemory();
32023
0
        p->level--;
32024
0
        return NULL;
32025
0
    }
32026
3.34k
    Py_ssize_t _children_capacity = 1;
32027
3.34k
    Py_ssize_t _n = 0;
32028
3.34k
    { // fstring_format_spec
32029
3.34k
        if (p->error_indicator) {
32030
0
            p->level--;
32031
0
            return NULL;
32032
0
        }
32033
3.34k
        D(fprintf(stderr, "%*c> _loop0_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec"));
32034
3.34k
        expr_ty fstring_format_spec_var;
32035
3.34k
        while (
32036
12.1k
            (fstring_format_spec_var = fstring_format_spec_rule(p))  // fstring_format_spec
32037
3.34k
        )
32038
8.81k
        {
32039
8.81k
            _res = fstring_format_spec_var;
32040
8.81k
            if (_n == _children_capacity) {
32041
1.68k
                _children_capacity *= 2;
32042
1.68k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32043
1.68k
                if (!_new_children) {
32044
0
                    PyMem_Free(_children);
32045
0
                    p->error_indicator = 1;
32046
0
                    PyErr_NoMemory();
32047
0
                    p->level--;
32048
0
                    return NULL;
32049
0
                }
32050
1.68k
                _children = _new_children;
32051
1.68k
            }
32052
8.81k
            _children[_n++] = _res;
32053
8.81k
            _mark = p->mark;
32054
8.81k
        }
32055
3.34k
        p->mark = _mark;
32056
3.34k
        D(fprintf(stderr, "%*c%s _loop0_76[%d-%d]: %s failed!\n", p->level, ' ',
32057
3.34k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_format_spec"));
32058
3.34k
    }
32059
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32060
3.34k
    if (!_seq) {
32061
0
        PyMem_Free(_children);
32062
0
        p->error_indicator = 1;
32063
0
        PyErr_NoMemory();
32064
0
        p->level--;
32065
0
        return NULL;
32066
0
    }
32067
12.1k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32068
3.34k
    PyMem_Free(_children);
32069
3.34k
    p->level--;
32070
3.34k
    return _seq;
32071
3.34k
}
32072
32073
// _loop0_77: fstring_middle
32074
static asdl_seq *
32075
_loop0_77_rule(Parser *p)
32076
15.4k
{
32077
15.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32078
1
        _Pypegen_stack_overflow(p);
32079
1
    }
32080
15.4k
    if (p->error_indicator) {
32081
1
        p->level--;
32082
1
        return NULL;
32083
1
    }
32084
15.4k
    void *_res = NULL;
32085
15.4k
    int _mark = p->mark;
32086
15.4k
    void **_children = PyMem_Malloc(sizeof(void *));
32087
15.4k
    if (!_children) {
32088
0
        p->error_indicator = 1;
32089
0
        PyErr_NoMemory();
32090
0
        p->level--;
32091
0
        return NULL;
32092
0
    }
32093
15.4k
    Py_ssize_t _children_capacity = 1;
32094
15.4k
    Py_ssize_t _n = 0;
32095
15.4k
    { // fstring_middle
32096
15.4k
        if (p->error_indicator) {
32097
0
            p->level--;
32098
0
            return NULL;
32099
0
        }
32100
15.4k
        D(fprintf(stderr, "%*c> _loop0_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_middle"));
32101
15.4k
        expr_ty fstring_middle_var;
32102
15.4k
        while (
32103
50.4k
            (fstring_middle_var = fstring_middle_rule(p))  // fstring_middle
32104
15.4k
        )
32105
34.9k
        {
32106
34.9k
            _res = fstring_middle_var;
32107
34.9k
            if (_n == _children_capacity) {
32108
5.85k
                _children_capacity *= 2;
32109
5.85k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32110
5.85k
                if (!_new_children) {
32111
0
                    PyMem_Free(_children);
32112
0
                    p->error_indicator = 1;
32113
0
                    PyErr_NoMemory();
32114
0
                    p->level--;
32115
0
                    return NULL;
32116
0
                }
32117
5.85k
                _children = _new_children;
32118
5.85k
            }
32119
34.9k
            _children[_n++] = _res;
32120
34.9k
            _mark = p->mark;
32121
34.9k
        }
32122
15.4k
        p->mark = _mark;
32123
15.4k
        D(fprintf(stderr, "%*c%s _loop0_77[%d-%d]: %s failed!\n", p->level, ' ',
32124
15.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_middle"));
32125
15.4k
    }
32126
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32127
15.4k
    if (!_seq) {
32128
0
        PyMem_Free(_children);
32129
0
        p->error_indicator = 1;
32130
0
        PyErr_NoMemory();
32131
0
        p->level--;
32132
0
        return NULL;
32133
0
    }
32134
50.4k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32135
15.4k
    PyMem_Free(_children);
32136
15.4k
    p->level--;
32137
15.4k
    return _seq;
32138
15.4k
}
32139
32140
// _loop0_78: tstring_format_spec
32141
static asdl_seq *
32142
_loop0_78_rule(Parser *p)
32143
2.76k
{
32144
2.76k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32145
0
        _Pypegen_stack_overflow(p);
32146
0
    }
32147
2.76k
    if (p->error_indicator) {
32148
0
        p->level--;
32149
0
        return NULL;
32150
0
    }
32151
2.76k
    void *_res = NULL;
32152
2.76k
    int _mark = p->mark;
32153
2.76k
    void **_children = PyMem_Malloc(sizeof(void *));
32154
2.76k
    if (!_children) {
32155
0
        p->error_indicator = 1;
32156
0
        PyErr_NoMemory();
32157
0
        p->level--;
32158
0
        return NULL;
32159
0
    }
32160
2.76k
    Py_ssize_t _children_capacity = 1;
32161
2.76k
    Py_ssize_t _n = 0;
32162
2.76k
    { // tstring_format_spec
32163
2.76k
        if (p->error_indicator) {
32164
0
            p->level--;
32165
0
            return NULL;
32166
0
        }
32167
2.76k
        D(fprintf(stderr, "%*c> _loop0_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_format_spec"));
32168
2.76k
        expr_ty tstring_format_spec_var;
32169
2.76k
        while (
32170
7.23k
            (tstring_format_spec_var = tstring_format_spec_rule(p))  // tstring_format_spec
32171
2.76k
        )
32172
4.47k
        {
32173
4.47k
            _res = tstring_format_spec_var;
32174
4.47k
            if (_n == _children_capacity) {
32175
1.00k
                _children_capacity *= 2;
32176
1.00k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32177
1.00k
                if (!_new_children) {
32178
0
                    PyMem_Free(_children);
32179
0
                    p->error_indicator = 1;
32180
0
                    PyErr_NoMemory();
32181
0
                    p->level--;
32182
0
                    return NULL;
32183
0
                }
32184
1.00k
                _children = _new_children;
32185
1.00k
            }
32186
4.47k
            _children[_n++] = _res;
32187
4.47k
            _mark = p->mark;
32188
4.47k
        }
32189
2.76k
        p->mark = _mark;
32190
2.76k
        D(fprintf(stderr, "%*c%s _loop0_78[%d-%d]: %s failed!\n", p->level, ' ',
32191
2.76k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_format_spec"));
32192
2.76k
    }
32193
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32194
2.76k
    if (!_seq) {
32195
0
        PyMem_Free(_children);
32196
0
        p->error_indicator = 1;
32197
0
        PyErr_NoMemory();
32198
0
        p->level--;
32199
0
        return NULL;
32200
0
    }
32201
7.23k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32202
2.76k
    PyMem_Free(_children);
32203
2.76k
    p->level--;
32204
2.76k
    return _seq;
32205
2.76k
}
32206
32207
// _loop0_79: tstring_middle
32208
static asdl_seq *
32209
_loop0_79_rule(Parser *p)
32210
4.46k
{
32211
4.46k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32212
1
        _Pypegen_stack_overflow(p);
32213
1
    }
32214
4.46k
    if (p->error_indicator) {
32215
1
        p->level--;
32216
1
        return NULL;
32217
1
    }
32218
4.46k
    void *_res = NULL;
32219
4.46k
    int _mark = p->mark;
32220
4.46k
    void **_children = PyMem_Malloc(sizeof(void *));
32221
4.46k
    if (!_children) {
32222
0
        p->error_indicator = 1;
32223
0
        PyErr_NoMemory();
32224
0
        p->level--;
32225
0
        return NULL;
32226
0
    }
32227
4.46k
    Py_ssize_t _children_capacity = 1;
32228
4.46k
    Py_ssize_t _n = 0;
32229
4.46k
    { // tstring_middle
32230
4.46k
        if (p->error_indicator) {
32231
0
            p->level--;
32232
0
            return NULL;
32233
0
        }
32234
4.46k
        D(fprintf(stderr, "%*c> _loop0_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_middle"));
32235
4.46k
        expr_ty tstring_middle_var;
32236
4.46k
        while (
32237
11.7k
            (tstring_middle_var = tstring_middle_rule(p))  // tstring_middle
32238
4.46k
        )
32239
7.33k
        {
32240
7.33k
            _res = tstring_middle_var;
32241
7.33k
            if (_n == _children_capacity) {
32242
1.19k
                _children_capacity *= 2;
32243
1.19k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32244
1.19k
                if (!_new_children) {
32245
0
                    PyMem_Free(_children);
32246
0
                    p->error_indicator = 1;
32247
0
                    PyErr_NoMemory();
32248
0
                    p->level--;
32249
0
                    return NULL;
32250
0
                }
32251
1.19k
                _children = _new_children;
32252
1.19k
            }
32253
7.33k
            _children[_n++] = _res;
32254
7.33k
            _mark = p->mark;
32255
7.33k
        }
32256
4.46k
        p->mark = _mark;
32257
4.46k
        D(fprintf(stderr, "%*c%s _loop0_79[%d-%d]: %s failed!\n", p->level, ' ',
32258
4.46k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_middle"));
32259
4.46k
    }
32260
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32261
4.46k
    if (!_seq) {
32262
0
        PyMem_Free(_children);
32263
0
        p->error_indicator = 1;
32264
0
        PyErr_NoMemory();
32265
0
        p->level--;
32266
0
        return NULL;
32267
0
    }
32268
11.7k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32269
4.46k
    PyMem_Free(_children);
32270
4.46k
    p->level--;
32271
4.46k
    return _seq;
32272
4.46k
}
32273
32274
// _loop1_80: (fstring | string | tstring)
32275
static asdl_seq *
32276
_loop1_80_rule(Parser *p)
32277
98.6k
{
32278
98.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32279
1
        _Pypegen_stack_overflow(p);
32280
1
    }
32281
98.6k
    if (p->error_indicator) {
32282
1
        p->level--;
32283
1
        return NULL;
32284
1
    }
32285
98.6k
    void *_res = NULL;
32286
98.6k
    int _mark = p->mark;
32287
98.6k
    void **_children = PyMem_Malloc(sizeof(void *));
32288
98.6k
    if (!_children) {
32289
0
        p->error_indicator = 1;
32290
0
        PyErr_NoMemory();
32291
0
        p->level--;
32292
0
        return NULL;
32293
0
    }
32294
98.6k
    Py_ssize_t _children_capacity = 1;
32295
98.6k
    Py_ssize_t _n = 0;
32296
98.6k
    { // (fstring | string | tstring)
32297
98.6k
        if (p->error_indicator) {
32298
0
            p->level--;
32299
0
            return NULL;
32300
0
        }
32301
98.6k
        D(fprintf(stderr, "%*c> _loop1_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(fstring | string | tstring)"));
32302
98.6k
        void *_tmp_161_var;
32303
98.6k
        while (
32304
176k
            (_tmp_161_var = _tmp_161_rule(p))  // fstring | string | tstring
32305
98.6k
        )
32306
77.6k
        {
32307
77.6k
            _res = _tmp_161_var;
32308
77.6k
            if (_n == _children_capacity) {
32309
7.70k
                _children_capacity *= 2;
32310
7.70k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32311
7.70k
                if (!_new_children) {
32312
0
                    PyMem_Free(_children);
32313
0
                    p->error_indicator = 1;
32314
0
                    PyErr_NoMemory();
32315
0
                    p->level--;
32316
0
                    return NULL;
32317
0
                }
32318
7.70k
                _children = _new_children;
32319
7.70k
            }
32320
77.6k
            _children[_n++] = _res;
32321
77.6k
            _mark = p->mark;
32322
77.6k
        }
32323
98.6k
        p->mark = _mark;
32324
98.6k
        D(fprintf(stderr, "%*c%s _loop1_80[%d-%d]: %s failed!\n", p->level, ' ',
32325
98.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(fstring | string | tstring)"));
32326
98.6k
    }
32327
98.6k
    if (_n == 0 || p->error_indicator) {
32328
51.8k
        PyMem_Free(_children);
32329
51.8k
        p->level--;
32330
51.8k
        return NULL;
32331
51.8k
    }
32332
46.8k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32333
46.8k
    if (!_seq) {
32334
0
        PyMem_Free(_children);
32335
0
        p->error_indicator = 1;
32336
0
        PyErr_NoMemory();
32337
0
        p->level--;
32338
0
        return NULL;
32339
0
    }
32340
123k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32341
46.8k
    PyMem_Free(_children);
32342
46.8k
    p->level--;
32343
46.8k
    return _seq;
32344
46.8k
}
32345
32346
// _tmp_81: star_named_expression ',' star_named_expressions?
32347
static void *
32348
_tmp_81_rule(Parser *p)
32349
80.5k
{
32350
80.5k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32351
1
        _Pypegen_stack_overflow(p);
32352
1
    }
32353
80.5k
    if (p->error_indicator) {
32354
1
        p->level--;
32355
1
        return NULL;
32356
1
    }
32357
80.5k
    void * _res = NULL;
32358
80.5k
    int _mark = p->mark;
32359
80.5k
    { // star_named_expression ',' star_named_expressions?
32360
80.5k
        if (p->error_indicator) {
32361
0
            p->level--;
32362
0
            return NULL;
32363
0
        }
32364
80.5k
        D(fprintf(stderr, "%*c> _tmp_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
32365
80.5k
        Token * _literal;
32366
80.5k
        expr_ty y;
32367
80.5k
        void *z;
32368
80.5k
        if (
32369
80.5k
            (y = star_named_expression_rule(p))  // star_named_expression
32370
80.5k
            &&
32371
80.5k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
32372
80.5k
            &&
32373
80.5k
            (z = star_named_expressions_rule(p), !p->error_indicator)  // star_named_expressions?
32374
80.5k
        )
32375
14.9k
        {
32376
14.9k
            D(fprintf(stderr, "%*c+ _tmp_81[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
32377
14.9k
            _res = _PyPegen_seq_insert_in_front ( p , y , z );
32378
14.9k
            if (_res == NULL && PyErr_Occurred()) {
32379
0
                p->error_indicator = 1;
32380
0
                p->level--;
32381
0
                return NULL;
32382
0
            }
32383
14.9k
            goto done;
32384
14.9k
        }
32385
65.6k
        p->mark = _mark;
32386
65.6k
        D(fprintf(stderr, "%*c%s _tmp_81[%d-%d]: %s failed!\n", p->level, ' ',
32387
65.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
32388
65.6k
    }
32389
0
    _res = NULL;
32390
80.5k
  done:
32391
80.5k
    p->level--;
32392
80.5k
    return _res;
32393
65.6k
}
32394
32395
// _loop0_82: ',' double_starred_kvpair
32396
static asdl_seq *
32397
_loop0_82_rule(Parser *p)
32398
8.23k
{
32399
8.23k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32400
0
        _Pypegen_stack_overflow(p);
32401
0
    }
32402
8.23k
    if (p->error_indicator) {
32403
0
        p->level--;
32404
0
        return NULL;
32405
0
    }
32406
8.23k
    void *_res = NULL;
32407
8.23k
    int _mark = p->mark;
32408
8.23k
    void **_children = PyMem_Malloc(sizeof(void *));
32409
8.23k
    if (!_children) {
32410
0
        p->error_indicator = 1;
32411
0
        PyErr_NoMemory();
32412
0
        p->level--;
32413
0
        return NULL;
32414
0
    }
32415
8.23k
    Py_ssize_t _children_capacity = 1;
32416
8.23k
    Py_ssize_t _n = 0;
32417
8.23k
    { // ',' double_starred_kvpair
32418
8.23k
        if (p->error_indicator) {
32419
0
            p->level--;
32420
0
            return NULL;
32421
0
        }
32422
8.23k
        D(fprintf(stderr, "%*c> _loop0_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair"));
32423
8.23k
        Token * _literal;
32424
8.23k
        KeyValuePair* elem;
32425
8.23k
        while (
32426
39.8k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
32427
39.8k
            &&
32428
39.8k
            (elem = double_starred_kvpair_rule(p))  // double_starred_kvpair
32429
8.23k
        )
32430
31.5k
        {
32431
31.5k
            _res = elem;
32432
31.5k
            if (_res == NULL && PyErr_Occurred()) {
32433
0
                p->error_indicator = 1;
32434
0
                PyMem_Free(_children);
32435
0
                p->level--;
32436
0
                return NULL;
32437
0
            }
32438
31.5k
            if (_n == _children_capacity) {
32439
1.62k
                _children_capacity *= 2;
32440
1.62k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32441
1.62k
                if (!_new_children) {
32442
0
                    PyMem_Free(_children);
32443
0
                    p->error_indicator = 1;
32444
0
                    PyErr_NoMemory();
32445
0
                    p->level--;
32446
0
                    return NULL;
32447
0
                }
32448
1.62k
                _children = _new_children;
32449
1.62k
            }
32450
31.5k
            _children[_n++] = _res;
32451
31.5k
            _mark = p->mark;
32452
31.5k
        }
32453
8.23k
        p->mark = _mark;
32454
8.23k
        D(fprintf(stderr, "%*c%s _loop0_82[%d-%d]: %s failed!\n", p->level, ' ',
32455
8.23k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair"));
32456
8.23k
    }
32457
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32458
8.23k
    if (!_seq) {
32459
0
        PyMem_Free(_children);
32460
0
        p->error_indicator = 1;
32461
0
        PyErr_NoMemory();
32462
0
        p->level--;
32463
0
        return NULL;
32464
0
    }
32465
39.8k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32466
8.23k
    PyMem_Free(_children);
32467
8.23k
    p->level--;
32468
8.23k
    return _seq;
32469
8.23k
}
32470
32471
// _gather_83: double_starred_kvpair _loop0_82
32472
static asdl_seq *
32473
_gather_83_rule(Parser *p)
32474
36.1k
{
32475
36.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32476
1
        _Pypegen_stack_overflow(p);
32477
1
    }
32478
36.1k
    if (p->error_indicator) {
32479
1
        p->level--;
32480
1
        return NULL;
32481
1
    }
32482
36.1k
    asdl_seq * _res = NULL;
32483
36.1k
    int _mark = p->mark;
32484
36.1k
    { // double_starred_kvpair _loop0_82
32485
36.1k
        if (p->error_indicator) {
32486
0
            p->level--;
32487
0
            return NULL;
32488
0
        }
32489
36.1k
        D(fprintf(stderr, "%*c> _gather_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_82"));
32490
36.1k
        KeyValuePair* elem;
32491
36.1k
        asdl_seq * seq;
32492
36.1k
        if (
32493
36.1k
            (elem = double_starred_kvpair_rule(p))  // double_starred_kvpair
32494
36.1k
            &&
32495
36.1k
            (seq = _loop0_82_rule(p))  // _loop0_82
32496
36.1k
        )
32497
8.23k
        {
32498
8.23k
            D(fprintf(stderr, "%*c+ _gather_83[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_82"));
32499
8.23k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
32500
8.23k
            goto done;
32501
8.23k
        }
32502
27.8k
        p->mark = _mark;
32503
27.8k
        D(fprintf(stderr, "%*c%s _gather_83[%d-%d]: %s failed!\n", p->level, ' ',
32504
27.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_82"));
32505
27.8k
    }
32506
0
    _res = NULL;
32507
36.1k
  done:
32508
36.1k
    p->level--;
32509
36.1k
    return _res;
32510
27.8k
}
32511
32512
// _loop1_84: for_if_clause
32513
static asdl_seq *
32514
_loop1_84_rule(Parser *p)
32515
88.6k
{
32516
88.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32517
0
        _Pypegen_stack_overflow(p);
32518
0
    }
32519
88.6k
    if (p->error_indicator) {
32520
0
        p->level--;
32521
0
        return NULL;
32522
0
    }
32523
88.6k
    void *_res = NULL;
32524
88.6k
    int _mark = p->mark;
32525
88.6k
    void **_children = PyMem_Malloc(sizeof(void *));
32526
88.6k
    if (!_children) {
32527
0
        p->error_indicator = 1;
32528
0
        PyErr_NoMemory();
32529
0
        p->level--;
32530
0
        return NULL;
32531
0
    }
32532
88.6k
    Py_ssize_t _children_capacity = 1;
32533
88.6k
    Py_ssize_t _n = 0;
32534
88.6k
    { // for_if_clause
32535
88.6k
        if (p->error_indicator) {
32536
0
            p->level--;
32537
0
            return NULL;
32538
0
        }
32539
88.6k
        D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause"));
32540
88.6k
        comprehension_ty for_if_clause_var;
32541
88.6k
        while (
32542
98.3k
            (for_if_clause_var = for_if_clause_rule(p))  // for_if_clause
32543
88.6k
        )
32544
9.70k
        {
32545
9.70k
            _res = for_if_clause_var;
32546
9.70k
            if (_n == _children_capacity) {
32547
751
                _children_capacity *= 2;
32548
751
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32549
751
                if (!_new_children) {
32550
0
                    PyMem_Free(_children);
32551
0
                    p->error_indicator = 1;
32552
0
                    PyErr_NoMemory();
32553
0
                    p->level--;
32554
0
                    return NULL;
32555
0
                }
32556
751
                _children = _new_children;
32557
751
            }
32558
9.70k
            _children[_n++] = _res;
32559
9.70k
            _mark = p->mark;
32560
9.70k
        }
32561
88.6k
        p->mark = _mark;
32562
88.6k
        D(fprintf(stderr, "%*c%s _loop1_84[%d-%d]: %s failed!\n", p->level, ' ',
32563
88.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause"));
32564
88.6k
    }
32565
88.6k
    if (_n == 0 || p->error_indicator) {
32566
79.9k
        PyMem_Free(_children);
32567
79.9k
        p->level--;
32568
79.9k
        return NULL;
32569
79.9k
    }
32570
8.75k
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32571
8.75k
    if (!_seq) {
32572
0
        PyMem_Free(_children);
32573
0
        p->error_indicator = 1;
32574
0
        PyErr_NoMemory();
32575
0
        p->level--;
32576
0
        return NULL;
32577
0
    }
32578
18.2k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32579
8.75k
    PyMem_Free(_children);
32580
8.75k
    p->level--;
32581
8.75k
    return _seq;
32582
8.75k
}
32583
32584
// _loop0_85: ('if' disjunction)
32585
static asdl_seq *
32586
_loop0_85_rule(Parser *p)
32587
9.70k
{
32588
9.70k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32589
0
        _Pypegen_stack_overflow(p);
32590
0
    }
32591
9.70k
    if (p->error_indicator) {
32592
0
        p->level--;
32593
0
        return NULL;
32594
0
    }
32595
9.70k
    void *_res = NULL;
32596
9.70k
    int _mark = p->mark;
32597
9.70k
    void **_children = PyMem_Malloc(sizeof(void *));
32598
9.70k
    if (!_children) {
32599
0
        p->error_indicator = 1;
32600
0
        PyErr_NoMemory();
32601
0
        p->level--;
32602
0
        return NULL;
32603
0
    }
32604
9.70k
    Py_ssize_t _children_capacity = 1;
32605
9.70k
    Py_ssize_t _n = 0;
32606
9.70k
    { // ('if' disjunction)
32607
9.70k
        if (p->error_indicator) {
32608
0
            p->level--;
32609
0
            return NULL;
32610
0
        }
32611
9.70k
        D(fprintf(stderr, "%*c> _loop0_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)"));
32612
9.70k
        void *_tmp_162_var;
32613
9.70k
        while (
32614
14.8k
            (_tmp_162_var = _tmp_162_rule(p))  // 'if' disjunction
32615
9.70k
        )
32616
5.12k
        {
32617
5.12k
            _res = _tmp_162_var;
32618
5.12k
            if (_n == _children_capacity) {
32619
2.11k
                _children_capacity *= 2;
32620
2.11k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32621
2.11k
                if (!_new_children) {
32622
0
                    PyMem_Free(_children);
32623
0
                    p->error_indicator = 1;
32624
0
                    PyErr_NoMemory();
32625
0
                    p->level--;
32626
0
                    return NULL;
32627
0
                }
32628
2.11k
                _children = _new_children;
32629
2.11k
            }
32630
5.12k
            _children[_n++] = _res;
32631
5.12k
            _mark = p->mark;
32632
5.12k
        }
32633
9.70k
        p->mark = _mark;
32634
9.70k
        D(fprintf(stderr, "%*c%s _loop0_85[%d-%d]: %s failed!\n", p->level, ' ',
32635
9.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('if' disjunction)"));
32636
9.70k
    }
32637
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32638
9.70k
    if (!_seq) {
32639
0
        PyMem_Free(_children);
32640
0
        p->error_indicator = 1;
32641
0
        PyErr_NoMemory();
32642
0
        p->level--;
32643
0
        return NULL;
32644
0
    }
32645
14.8k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32646
9.70k
    PyMem_Free(_children);
32647
9.70k
    p->level--;
32648
9.70k
    return _seq;
32649
9.70k
}
32650
32651
// _tmp_86: assignment_expression | expression !':='
32652
static void *
32653
_tmp_86_rule(Parser *p)
32654
176k
{
32655
176k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32656
1
        _Pypegen_stack_overflow(p);
32657
1
    }
32658
176k
    if (p->error_indicator) {
32659
1
        p->level--;
32660
1
        return NULL;
32661
1
    }
32662
176k
    void * _res = NULL;
32663
176k
    int _mark = p->mark;
32664
176k
    { // assignment_expression
32665
176k
        if (p->error_indicator) {
32666
0
            p->level--;
32667
0
            return NULL;
32668
0
        }
32669
176k
        D(fprintf(stderr, "%*c> _tmp_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
32670
176k
        expr_ty assignment_expression_var;
32671
176k
        if (
32672
176k
            (assignment_expression_var = assignment_expression_rule(p))  // assignment_expression
32673
176k
        )
32674
491
        {
32675
491
            D(fprintf(stderr, "%*c+ _tmp_86[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
32676
491
            _res = assignment_expression_var;
32677
491
            goto done;
32678
491
        }
32679
175k
        p->mark = _mark;
32680
175k
        D(fprintf(stderr, "%*c%s _tmp_86[%d-%d]: %s failed!\n", p->level, ' ',
32681
175k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression"));
32682
175k
    }
32683
0
    { // expression !':='
32684
175k
        if (p->error_indicator) {
32685
151
            p->level--;
32686
151
            return NULL;
32687
151
        }
32688
175k
        D(fprintf(stderr, "%*c> _tmp_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='"));
32689
175k
        expr_ty expression_var;
32690
175k
        if (
32691
175k
            (expression_var = expression_rule(p))  // expression
32692
175k
            &&
32693
175k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53)  // token=':='
32694
175k
        )
32695
98.4k
        {
32696
98.4k
            D(fprintf(stderr, "%*c+ _tmp_86[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='"));
32697
98.4k
            _res = expression_var;
32698
98.4k
            goto done;
32699
98.4k
        }
32700
76.9k
        p->mark = _mark;
32701
76.9k
        D(fprintf(stderr, "%*c%s _tmp_86[%d-%d]: %s failed!\n", p->level, ' ',
32702
76.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='"));
32703
76.9k
    }
32704
0
    _res = NULL;
32705
175k
  done:
32706
175k
    p->level--;
32707
175k
    return _res;
32708
76.9k
}
32709
32710
// _loop0_87: ',' (starred_expression | (assignment_expression | expression !':=') !'=')
32711
static asdl_seq *
32712
_loop0_87_rule(Parser *p)
32713
37.1k
{
32714
37.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32715
0
        _Pypegen_stack_overflow(p);
32716
0
    }
32717
37.1k
    if (p->error_indicator) {
32718
0
        p->level--;
32719
0
        return NULL;
32720
0
    }
32721
37.1k
    void *_res = NULL;
32722
37.1k
    int _mark = p->mark;
32723
37.1k
    void **_children = PyMem_Malloc(sizeof(void *));
32724
37.1k
    if (!_children) {
32725
0
        p->error_indicator = 1;
32726
0
        PyErr_NoMemory();
32727
0
        p->level--;
32728
0
        return NULL;
32729
0
    }
32730
37.1k
    Py_ssize_t _children_capacity = 1;
32731
37.1k
    Py_ssize_t _n = 0;
32732
37.1k
    { // ',' (starred_expression | (assignment_expression | expression !':=') !'=')
32733
37.1k
        if (p->error_indicator) {
32734
0
            p->level--;
32735
0
            return NULL;
32736
0
        }
32737
37.1k
        D(fprintf(stderr, "%*c> _loop0_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')"));
32738
37.1k
        Token * _literal;
32739
37.1k
        void *elem;
32740
37.1k
        while (
32741
50.4k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
32742
50.4k
            &&
32743
50.4k
            (elem = _tmp_163_rule(p))  // starred_expression | (assignment_expression | expression !':=') !'='
32744
37.1k
        )
32745
13.3k
        {
32746
13.3k
            _res = elem;
32747
13.3k
            if (_res == NULL && PyErr_Occurred()) {
32748
0
                p->error_indicator = 1;
32749
0
                PyMem_Free(_children);
32750
0
                p->level--;
32751
0
                return NULL;
32752
0
            }
32753
13.3k
            if (_n == _children_capacity) {
32754
3.16k
                _children_capacity *= 2;
32755
3.16k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32756
3.16k
                if (!_new_children) {
32757
0
                    PyMem_Free(_children);
32758
0
                    p->error_indicator = 1;
32759
0
                    PyErr_NoMemory();
32760
0
                    p->level--;
32761
0
                    return NULL;
32762
0
                }
32763
3.16k
                _children = _new_children;
32764
3.16k
            }
32765
13.3k
            _children[_n++] = _res;
32766
13.3k
            _mark = p->mark;
32767
13.3k
        }
32768
37.1k
        p->mark = _mark;
32769
37.1k
        D(fprintf(stderr, "%*c%s _loop0_87[%d-%d]: %s failed!\n", p->level, ' ',
32770
37.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')"));
32771
37.1k
    }
32772
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32773
37.1k
    if (!_seq) {
32774
0
        PyMem_Free(_children);
32775
0
        p->error_indicator = 1;
32776
0
        PyErr_NoMemory();
32777
0
        p->level--;
32778
0
        return NULL;
32779
0
    }
32780
50.4k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32781
37.1k
    PyMem_Free(_children);
32782
37.1k
    p->level--;
32783
37.1k
    return _seq;
32784
37.1k
}
32785
32786
// _gather_88:
32787
//     | (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_87
32788
static asdl_seq *
32789
_gather_88_rule(Parser *p)
32790
79.1k
{
32791
79.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32792
0
        _Pypegen_stack_overflow(p);
32793
0
    }
32794
79.1k
    if (p->error_indicator) {
32795
0
        p->level--;
32796
0
        return NULL;
32797
0
    }
32798
79.1k
    asdl_seq * _res = NULL;
32799
79.1k
    int _mark = p->mark;
32800
79.1k
    { // (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_87
32801
79.1k
        if (p->error_indicator) {
32802
0
            p->level--;
32803
0
            return NULL;
32804
0
        }
32805
79.1k
        D(fprintf(stderr, "%*c> _gather_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_87"));
32806
79.1k
        void *elem;
32807
79.1k
        asdl_seq * seq;
32808
79.1k
        if (
32809
79.1k
            (elem = _tmp_163_rule(p))  // starred_expression | (assignment_expression | expression !':=') !'='
32810
79.1k
            &&
32811
79.1k
            (seq = _loop0_87_rule(p))  // _loop0_87
32812
79.1k
        )
32813
37.1k
        {
32814
37.1k
            D(fprintf(stderr, "%*c+ _gather_88[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_87"));
32815
37.1k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
32816
37.1k
            goto done;
32817
37.1k
        }
32818
42.0k
        p->mark = _mark;
32819
42.0k
        D(fprintf(stderr, "%*c%s _gather_88[%d-%d]: %s failed!\n", p->level, ' ',
32820
42.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_87"));
32821
42.0k
    }
32822
0
    _res = NULL;
32823
79.1k
  done:
32824
79.1k
    p->level--;
32825
79.1k
    return _res;
32826
42.0k
}
32827
32828
// _tmp_89: ',' kwargs
32829
static void *
32830
_tmp_89_rule(Parser *p)
32831
34.3k
{
32832
34.3k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32833
0
        _Pypegen_stack_overflow(p);
32834
0
    }
32835
34.3k
    if (p->error_indicator) {
32836
507
        p->level--;
32837
507
        return NULL;
32838
507
    }
32839
33.8k
    void * _res = NULL;
32840
33.8k
    int _mark = p->mark;
32841
33.8k
    { // ',' kwargs
32842
33.8k
        if (p->error_indicator) {
32843
0
            p->level--;
32844
0
            return NULL;
32845
0
        }
32846
33.8k
        D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwargs"));
32847
33.8k
        Token * _literal;
32848
33.8k
        asdl_seq* k;
32849
33.8k
        if (
32850
33.8k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
32851
33.8k
            &&
32852
33.8k
            (k = kwargs_rule(p))  // kwargs
32853
33.8k
        )
32854
2.48k
        {
32855
2.48k
            D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' kwargs"));
32856
2.48k
            _res = k;
32857
2.48k
            if (_res == NULL && PyErr_Occurred()) {
32858
0
                p->error_indicator = 1;
32859
0
                p->level--;
32860
0
                return NULL;
32861
0
            }
32862
2.48k
            goto done;
32863
2.48k
        }
32864
31.3k
        p->mark = _mark;
32865
31.3k
        D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ',
32866
31.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwargs"));
32867
31.3k
    }
32868
0
    _res = NULL;
32869
33.8k
  done:
32870
33.8k
    p->level--;
32871
33.8k
    return _res;
32872
31.3k
}
32873
32874
// _loop0_90: ',' kwarg_or_starred
32875
static asdl_seq *
32876
_loop0_90_rule(Parser *p)
32877
16.2k
{
32878
16.2k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32879
0
        _Pypegen_stack_overflow(p);
32880
0
    }
32881
16.2k
    if (p->error_indicator) {
32882
0
        p->level--;
32883
0
        return NULL;
32884
0
    }
32885
16.2k
    void *_res = NULL;
32886
16.2k
    int _mark = p->mark;
32887
16.2k
    void **_children = PyMem_Malloc(sizeof(void *));
32888
16.2k
    if (!_children) {
32889
0
        p->error_indicator = 1;
32890
0
        PyErr_NoMemory();
32891
0
        p->level--;
32892
0
        return NULL;
32893
0
    }
32894
16.2k
    Py_ssize_t _children_capacity = 1;
32895
16.2k
    Py_ssize_t _n = 0;
32896
16.2k
    { // ',' kwarg_or_starred
32897
16.2k
        if (p->error_indicator) {
32898
0
            p->level--;
32899
0
            return NULL;
32900
0
        }
32901
16.2k
        D(fprintf(stderr, "%*c> _loop0_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred"));
32902
16.2k
        Token * _literal;
32903
16.2k
        KeywordOrStarred* elem;
32904
16.2k
        while (
32905
26.1k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
32906
26.1k
            &&
32907
26.1k
            (elem = kwarg_or_starred_rule(p))  // kwarg_or_starred
32908
16.2k
        )
32909
9.83k
        {
32910
9.83k
            _res = elem;
32911
9.83k
            if (_res == NULL && PyErr_Occurred()) {
32912
0
                p->error_indicator = 1;
32913
0
                PyMem_Free(_children);
32914
0
                p->level--;
32915
0
                return NULL;
32916
0
            }
32917
9.83k
            if (_n == _children_capacity) {
32918
2.43k
                _children_capacity *= 2;
32919
2.43k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32920
2.43k
                if (!_new_children) {
32921
0
                    PyMem_Free(_children);
32922
0
                    p->error_indicator = 1;
32923
0
                    PyErr_NoMemory();
32924
0
                    p->level--;
32925
0
                    return NULL;
32926
0
                }
32927
2.43k
                _children = _new_children;
32928
2.43k
            }
32929
9.83k
            _children[_n++] = _res;
32930
9.83k
            _mark = p->mark;
32931
9.83k
        }
32932
16.2k
        p->mark = _mark;
32933
16.2k
        D(fprintf(stderr, "%*c%s _loop0_90[%d-%d]: %s failed!\n", p->level, ' ',
32934
16.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_starred"));
32935
16.2k
    }
32936
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32937
16.2k
    if (!_seq) {
32938
0
        PyMem_Free(_children);
32939
0
        p->error_indicator = 1;
32940
0
        PyErr_NoMemory();
32941
0
        p->level--;
32942
0
        return NULL;
32943
0
    }
32944
26.1k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
32945
16.2k
    PyMem_Free(_children);
32946
16.2k
    p->level--;
32947
16.2k
    return _seq;
32948
16.2k
}
32949
32950
// _gather_91: kwarg_or_starred _loop0_90
32951
static asdl_seq *
32952
_gather_91_rule(Parser *p)
32953
96.6k
{
32954
96.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32955
0
        _Pypegen_stack_overflow(p);
32956
0
    }
32957
96.6k
    if (p->error_indicator) {
32958
0
        p->level--;
32959
0
        return NULL;
32960
0
    }
32961
96.6k
    asdl_seq * _res = NULL;
32962
96.6k
    int _mark = p->mark;
32963
96.6k
    { // kwarg_or_starred _loop0_90
32964
96.6k
        if (p->error_indicator) {
32965
0
            p->level--;
32966
0
            return NULL;
32967
0
        }
32968
96.6k
        D(fprintf(stderr, "%*c> _gather_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_90"));
32969
96.6k
        KeywordOrStarred* elem;
32970
96.6k
        asdl_seq * seq;
32971
96.6k
        if (
32972
96.6k
            (elem = kwarg_or_starred_rule(p))  // kwarg_or_starred
32973
96.6k
            &&
32974
96.6k
            (seq = _loop0_90_rule(p))  // _loop0_90
32975
96.6k
        )
32976
16.2k
        {
32977
16.2k
            D(fprintf(stderr, "%*c+ _gather_91[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_90"));
32978
16.2k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
32979
16.2k
            goto done;
32980
16.2k
        }
32981
80.3k
        p->mark = _mark;
32982
80.3k
        D(fprintf(stderr, "%*c%s _gather_91[%d-%d]: %s failed!\n", p->level, ' ',
32983
80.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_90"));
32984
80.3k
    }
32985
0
    _res = NULL;
32986
96.6k
  done:
32987
96.6k
    p->level--;
32988
96.6k
    return _res;
32989
80.3k
}
32990
32991
// _loop0_92: ',' kwarg_or_double_starred
32992
static asdl_seq *
32993
_loop0_92_rule(Parser *p)
32994
3.43k
{
32995
3.43k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
32996
0
        _Pypegen_stack_overflow(p);
32997
0
    }
32998
3.43k
    if (p->error_indicator) {
32999
0
        p->level--;
33000
0
        return NULL;
33001
0
    }
33002
3.43k
    void *_res = NULL;
33003
3.43k
    int _mark = p->mark;
33004
3.43k
    void **_children = PyMem_Malloc(sizeof(void *));
33005
3.43k
    if (!_children) {
33006
0
        p->error_indicator = 1;
33007
0
        PyErr_NoMemory();
33008
0
        p->level--;
33009
0
        return NULL;
33010
0
    }
33011
3.43k
    Py_ssize_t _children_capacity = 1;
33012
3.43k
    Py_ssize_t _n = 0;
33013
3.43k
    { // ',' kwarg_or_double_starred
33014
3.43k
        if (p->error_indicator) {
33015
0
            p->level--;
33016
0
            return NULL;
33017
0
        }
33018
3.43k
        D(fprintf(stderr, "%*c> _loop0_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred"));
33019
3.43k
        Token * _literal;
33020
3.43k
        KeywordOrStarred* elem;
33021
3.43k
        while (
33022
9.46k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
33023
9.46k
            &&
33024
9.46k
            (elem = kwarg_or_double_starred_rule(p))  // kwarg_or_double_starred
33025
3.43k
        )
33026
6.02k
        {
33027
6.02k
            _res = elem;
33028
6.02k
            if (_res == NULL && PyErr_Occurred()) {
33029
0
                p->error_indicator = 1;
33030
0
                PyMem_Free(_children);
33031
0
                p->level--;
33032
0
                return NULL;
33033
0
            }
33034
6.02k
            if (_n == _children_capacity) {
33035
955
                _children_capacity *= 2;
33036
955
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33037
955
                if (!_new_children) {
33038
0
                    PyMem_Free(_children);
33039
0
                    p->error_indicator = 1;
33040
0
                    PyErr_NoMemory();
33041
0
                    p->level--;
33042
0
                    return NULL;
33043
0
                }
33044
955
                _children = _new_children;
33045
955
            }
33046
6.02k
            _children[_n++] = _res;
33047
6.02k
            _mark = p->mark;
33048
6.02k
        }
33049
3.43k
        p->mark = _mark;
33050
3.43k
        D(fprintf(stderr, "%*c%s _loop0_92[%d-%d]: %s failed!\n", p->level, ' ',
33051
3.43k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_double_starred"));
33052
3.43k
    }
33053
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33054
3.43k
    if (!_seq) {
33055
0
        PyMem_Free(_children);
33056
0
        p->error_indicator = 1;
33057
0
        PyErr_NoMemory();
33058
0
        p->level--;
33059
0
        return NULL;
33060
0
    }
33061
9.46k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
33062
3.43k
    PyMem_Free(_children);
33063
3.43k
    p->level--;
33064
3.43k
    return _seq;
33065
3.43k
}
33066
33067
// _gather_93: kwarg_or_double_starred _loop0_92
33068
static asdl_seq *
33069
_gather_93_rule(Parser *p)
33070
43.4k
{
33071
43.4k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33072
0
        _Pypegen_stack_overflow(p);
33073
0
    }
33074
43.4k
    if (p->error_indicator) {
33075
274
        p->level--;
33076
274
        return NULL;
33077
274
    }
33078
43.1k
    asdl_seq * _res = NULL;
33079
43.1k
    int _mark = p->mark;
33080
43.1k
    { // kwarg_or_double_starred _loop0_92
33081
43.1k
        if (p->error_indicator) {
33082
0
            p->level--;
33083
0
            return NULL;
33084
0
        }
33085
43.1k
        D(fprintf(stderr, "%*c> _gather_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_92"));
33086
43.1k
        KeywordOrStarred* elem;
33087
43.1k
        asdl_seq * seq;
33088
43.1k
        if (
33089
43.1k
            (elem = kwarg_or_double_starred_rule(p))  // kwarg_or_double_starred
33090
43.1k
            &&
33091
43.1k
            (seq = _loop0_92_rule(p))  // _loop0_92
33092
43.1k
        )
33093
3.43k
        {
33094
3.43k
            D(fprintf(stderr, "%*c+ _gather_93[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_92"));
33095
3.43k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
33096
3.43k
            goto done;
33097
3.43k
        }
33098
39.7k
        p->mark = _mark;
33099
39.7k
        D(fprintf(stderr, "%*c%s _gather_93[%d-%d]: %s failed!\n", p->level, ' ',
33100
39.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_92"));
33101
39.7k
    }
33102
0
    _res = NULL;
33103
43.1k
  done:
33104
43.1k
    p->level--;
33105
43.1k
    return _res;
33106
39.7k
}
33107
33108
// _loop0_94: (',' star_target)
33109
static asdl_seq *
33110
_loop0_94_rule(Parser *p)
33111
14.6k
{
33112
14.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33113
0
        _Pypegen_stack_overflow(p);
33114
0
    }
33115
14.6k
    if (p->error_indicator) {
33116
0
        p->level--;
33117
0
        return NULL;
33118
0
    }
33119
14.6k
    void *_res = NULL;
33120
14.6k
    int _mark = p->mark;
33121
14.6k
    void **_children = PyMem_Malloc(sizeof(void *));
33122
14.6k
    if (!_children) {
33123
0
        p->error_indicator = 1;
33124
0
        PyErr_NoMemory();
33125
0
        p->level--;
33126
0
        return NULL;
33127
0
    }
33128
14.6k
    Py_ssize_t _children_capacity = 1;
33129
14.6k
    Py_ssize_t _n = 0;
33130
14.6k
    { // (',' star_target)
33131
14.6k
        if (p->error_indicator) {
33132
0
            p->level--;
33133
0
            return NULL;
33134
0
        }
33135
14.6k
        D(fprintf(stderr, "%*c> _loop0_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)"));
33136
14.6k
        void *_tmp_164_var;
33137
14.6k
        while (
33138
22.2k
            (_tmp_164_var = _tmp_164_rule(p))  // ',' star_target
33139
14.6k
        )
33140
7.64k
        {
33141
7.64k
            _res = _tmp_164_var;
33142
7.64k
            if (_n == _children_capacity) {
33143
1.56k
                _children_capacity *= 2;
33144
1.56k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33145
1.56k
                if (!_new_children) {
33146
0
                    PyMem_Free(_children);
33147
0
                    p->error_indicator = 1;
33148
0
                    PyErr_NoMemory();
33149
0
                    p->level--;
33150
0
                    return NULL;
33151
0
                }
33152
1.56k
                _children = _new_children;
33153
1.56k
            }
33154
7.64k
            _children[_n++] = _res;
33155
7.64k
            _mark = p->mark;
33156
7.64k
        }
33157
14.6k
        p->mark = _mark;
33158
14.6k
        D(fprintf(stderr, "%*c%s _loop0_94[%d-%d]: %s failed!\n", p->level, ' ',
33159
14.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)"));
33160
14.6k
    }
33161
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33162
14.6k
    if (!_seq) {
33163
0
        PyMem_Free(_children);
33164
0
        p->error_indicator = 1;
33165
0
        PyErr_NoMemory();
33166
0
        p->level--;
33167
0
        return NULL;
33168
0
    }
33169
22.2k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
33170
14.6k
    PyMem_Free(_children);
33171
14.6k
    p->level--;
33172
14.6k
    return _seq;
33173
14.6k
}
33174
33175
// _loop0_95: ',' star_target
33176
static asdl_seq *
33177
_loop0_95_rule(Parser *p)
33178
2.31k
{
33179
2.31k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33180
0
        _Pypegen_stack_overflow(p);
33181
0
    }
33182
2.31k
    if (p->error_indicator) {
33183
0
        p->level--;
33184
0
        return NULL;
33185
0
    }
33186
2.31k
    void *_res = NULL;
33187
2.31k
    int _mark = p->mark;
33188
2.31k
    void **_children = PyMem_Malloc(sizeof(void *));
33189
2.31k
    if (!_children) {
33190
0
        p->error_indicator = 1;
33191
0
        PyErr_NoMemory();
33192
0
        p->level--;
33193
0
        return NULL;
33194
0
    }
33195
2.31k
    Py_ssize_t _children_capacity = 1;
33196
2.31k
    Py_ssize_t _n = 0;
33197
2.31k
    { // ',' star_target
33198
2.31k
        if (p->error_indicator) {
33199
0
            p->level--;
33200
0
            return NULL;
33201
0
        }
33202
2.31k
        D(fprintf(stderr, "%*c> _loop0_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target"));
33203
2.31k
        Token * _literal;
33204
2.31k
        expr_ty elem;
33205
2.31k
        while (
33206
5.12k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
33207
5.12k
            &&
33208
5.12k
            (elem = star_target_rule(p))  // star_target
33209
2.31k
        )
33210
2.81k
        {
33211
2.81k
            _res = elem;
33212
2.81k
            if (_res == NULL && PyErr_Occurred()) {
33213
0
                p->error_indicator = 1;
33214
0
                PyMem_Free(_children);
33215
0
                p->level--;
33216
0
                return NULL;
33217
0
            }
33218
2.81k
            if (_n == _children_capacity) {
33219
852
                _children_capacity *= 2;
33220
852
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33221
852
                if (!_new_children) {
33222
0
                    PyMem_Free(_children);
33223
0
                    p->error_indicator = 1;
33224
0
                    PyErr_NoMemory();
33225
0
                    p->level--;
33226
0
                    return NULL;
33227
0
                }
33228
852
                _children = _new_children;
33229
852
            }
33230
2.81k
            _children[_n++] = _res;
33231
2.81k
            _mark = p->mark;
33232
2.81k
        }
33233
2.31k
        p->mark = _mark;
33234
2.31k
        D(fprintf(stderr, "%*c%s _loop0_95[%d-%d]: %s failed!\n", p->level, ' ',
33235
2.31k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target"));
33236
2.31k
    }
33237
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33238
2.31k
    if (!_seq) {
33239
0
        PyMem_Free(_children);
33240
0
        p->error_indicator = 1;
33241
0
        PyErr_NoMemory();
33242
0
        p->level--;
33243
0
        return NULL;
33244
0
    }
33245
5.12k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
33246
2.31k
    PyMem_Free(_children);
33247
2.31k
    p->level--;
33248
2.31k
    return _seq;
33249
2.31k
}
33250
33251
// _gather_96: star_target _loop0_95
33252
static asdl_seq *
33253
_gather_96_rule(Parser *p)
33254
9.17k
{
33255
9.17k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33256
0
        _Pypegen_stack_overflow(p);
33257
0
    }
33258
9.17k
    if (p->error_indicator) {
33259
0
        p->level--;
33260
0
        return NULL;
33261
0
    }
33262
9.17k
    asdl_seq * _res = NULL;
33263
9.17k
    int _mark = p->mark;
33264
9.17k
    { // star_target _loop0_95
33265
9.17k
        if (p->error_indicator) {
33266
0
            p->level--;
33267
0
            return NULL;
33268
0
        }
33269
9.17k
        D(fprintf(stderr, "%*c> _gather_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target _loop0_95"));
33270
9.17k
        expr_ty elem;
33271
9.17k
        asdl_seq * seq;
33272
9.17k
        if (
33273
9.17k
            (elem = star_target_rule(p))  // star_target
33274
9.17k
            &&
33275
9.17k
            (seq = _loop0_95_rule(p))  // _loop0_95
33276
9.17k
        )
33277
2.31k
        {
33278
2.31k
            D(fprintf(stderr, "%*c+ _gather_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target _loop0_95"));
33279
2.31k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
33280
2.31k
            goto done;
33281
2.31k
        }
33282
6.85k
        p->mark = _mark;
33283
6.85k
        D(fprintf(stderr, "%*c%s _gather_96[%d-%d]: %s failed!\n", p->level, ' ',
33284
6.85k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target _loop0_95"));
33285
6.85k
    }
33286
0
    _res = NULL;
33287
9.17k
  done:
33288
9.17k
    p->level--;
33289
9.17k
    return _res;
33290
6.85k
}
33291
33292
// _loop1_97: (',' star_target)
33293
static asdl_seq *
33294
_loop1_97_rule(Parser *p)
33295
3.13k
{
33296
3.13k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33297
0
        _Pypegen_stack_overflow(p);
33298
0
    }
33299
3.13k
    if (p->error_indicator) {
33300
0
        p->level--;
33301
0
        return NULL;
33302
0
    }
33303
3.13k
    void *_res = NULL;
33304
3.13k
    int _mark = p->mark;
33305
3.13k
    void **_children = PyMem_Malloc(sizeof(void *));
33306
3.13k
    if (!_children) {
33307
0
        p->error_indicator = 1;
33308
0
        PyErr_NoMemory();
33309
0
        p->level--;
33310
0
        return NULL;
33311
0
    }
33312
3.13k
    Py_ssize_t _children_capacity = 1;
33313
3.13k
    Py_ssize_t _n = 0;
33314
3.13k
    { // (',' star_target)
33315
3.13k
        if (p->error_indicator) {
33316
0
            p->level--;
33317
0
            return NULL;
33318
0
        }
33319
3.13k
        D(fprintf(stderr, "%*c> _loop1_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)"));
33320
3.13k
        void *_tmp_164_var;
33321
3.13k
        while (
33322
4.13k
            (_tmp_164_var = _tmp_164_rule(p))  // ',' star_target
33323
3.13k
        )
33324
995
        {
33325
995
            _res = _tmp_164_var;
33326
995
            if (_n == _children_capacity) {
33327
312
                _children_capacity *= 2;
33328
312
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33329
312
                if (!_new_children) {
33330
0
                    PyMem_Free(_children);
33331
0
                    p->error_indicator = 1;
33332
0
                    PyErr_NoMemory();
33333
0
                    p->level--;
33334
0
                    return NULL;
33335
0
                }
33336
312
                _children = _new_children;
33337
312
            }
33338
995
            _children[_n++] = _res;
33339
995
            _mark = p->mark;
33340
995
        }
33341
3.13k
        p->mark = _mark;
33342
3.13k
        D(fprintf(stderr, "%*c%s _loop1_97[%d-%d]: %s failed!\n", p->level, ' ',
33343
3.13k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)"));
33344
3.13k
    }
33345
3.13k
    if (_n == 0 || p->error_indicator) {
33346
2.73k
        PyMem_Free(_children);
33347
2.73k
        p->level--;
33348
2.73k
        return NULL;
33349
2.73k
    }
33350
409
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33351
409
    if (!_seq) {
33352
0
        PyMem_Free(_children);
33353
0
        p->error_indicator = 1;
33354
0
        PyErr_NoMemory();
33355
0
        p->level--;
33356
0
        return NULL;
33357
0
    }
33358
1.40k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
33359
409
    PyMem_Free(_children);
33360
409
    p->level--;
33361
409
    return _seq;
33362
409
}
33363
33364
// _tmp_98: !'*' star_target
33365
static void *
33366
_tmp_98_rule(Parser *p)
33367
2.70k
{
33368
2.70k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33369
0
        _Pypegen_stack_overflow(p);
33370
0
    }
33371
2.70k
    if (p->error_indicator) {
33372
0
        p->level--;
33373
0
        return NULL;
33374
0
    }
33375
2.70k
    void * _res = NULL;
33376
2.70k
    int _mark = p->mark;
33377
2.70k
    { // !'*' star_target
33378
2.70k
        if (p->error_indicator) {
33379
0
            p->level--;
33380
0
            return NULL;
33381
0
        }
33382
2.70k
        D(fprintf(stderr, "%*c> _tmp_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!'*' star_target"));
33383
2.70k
        expr_ty star_target_var;
33384
2.70k
        if (
33385
2.70k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 16)  // token='*'
33386
2.70k
            &&
33387
2.70k
            (star_target_var = star_target_rule(p))  // star_target
33388
2.70k
        )
33389
1.56k
        {
33390
1.56k
            D(fprintf(stderr, "%*c+ _tmp_98[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!'*' star_target"));
33391
1.56k
            _res = star_target_var;
33392
1.56k
            goto done;
33393
1.56k
        }
33394
1.13k
        p->mark = _mark;
33395
1.13k
        D(fprintf(stderr, "%*c%s _tmp_98[%d-%d]: %s failed!\n", p->level, ' ',
33396
1.13k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!'*' star_target"));
33397
1.13k
    }
33398
0
    _res = NULL;
33399
2.70k
  done:
33400
2.70k
    p->level--;
33401
2.70k
    return _res;
33402
1.13k
}
33403
33404
// _loop0_99: ',' del_target
33405
static asdl_seq *
33406
_loop0_99_rule(Parser *p)
33407
2.30k
{
33408
2.30k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33409
0
        _Pypegen_stack_overflow(p);
33410
0
    }
33411
2.30k
    if (p->error_indicator) {
33412
0
        p->level--;
33413
0
        return NULL;
33414
0
    }
33415
2.30k
    void *_res = NULL;
33416
2.30k
    int _mark = p->mark;
33417
2.30k
    void **_children = PyMem_Malloc(sizeof(void *));
33418
2.30k
    if (!_children) {
33419
0
        p->error_indicator = 1;
33420
0
        PyErr_NoMemory();
33421
0
        p->level--;
33422
0
        return NULL;
33423
0
    }
33424
2.30k
    Py_ssize_t _children_capacity = 1;
33425
2.30k
    Py_ssize_t _n = 0;
33426
2.30k
    { // ',' del_target
33427
2.30k
        if (p->error_indicator) {
33428
0
            p->level--;
33429
0
            return NULL;
33430
0
        }
33431
2.30k
        D(fprintf(stderr, "%*c> _loop0_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' del_target"));
33432
2.30k
        Token * _literal;
33433
2.30k
        expr_ty elem;
33434
2.30k
        while (
33435
5.77k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
33436
5.77k
            &&
33437
5.77k
            (elem = del_target_rule(p))  // del_target
33438
2.30k
        )
33439
3.47k
        {
33440
3.47k
            _res = elem;
33441
3.47k
            if (_res == NULL && PyErr_Occurred()) {
33442
0
                p->error_indicator = 1;
33443
0
                PyMem_Free(_children);
33444
0
                p->level--;
33445
0
                return NULL;
33446
0
            }
33447
3.47k
            if (_n == _children_capacity) {
33448
1.06k
                _children_capacity *= 2;
33449
1.06k
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33450
1.06k
                if (!_new_children) {
33451
0
                    PyMem_Free(_children);
33452
0
                    p->error_indicator = 1;
33453
0
                    PyErr_NoMemory();
33454
0
                    p->level--;
33455
0
                    return NULL;
33456
0
                }
33457
1.06k
                _children = _new_children;
33458
1.06k
            }
33459
3.47k
            _children[_n++] = _res;
33460
3.47k
            _mark = p->mark;
33461
3.47k
        }
33462
2.30k
        p->mark = _mark;
33463
2.30k
        D(fprintf(stderr, "%*c%s _loop0_99[%d-%d]: %s failed!\n", p->level, ' ',
33464
2.30k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' del_target"));
33465
2.30k
    }
33466
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33467
2.30k
    if (!_seq) {
33468
0
        PyMem_Free(_children);
33469
0
        p->error_indicator = 1;
33470
0
        PyErr_NoMemory();
33471
0
        p->level--;
33472
0
        return NULL;
33473
0
    }
33474
5.77k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
33475
2.30k
    PyMem_Free(_children);
33476
2.30k
    p->level--;
33477
2.30k
    return _seq;
33478
2.30k
}
33479
33480
// _gather_100: del_target _loop0_99
33481
static asdl_seq *
33482
_gather_100_rule(Parser *p)
33483
5.00k
{
33484
5.00k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33485
0
        _Pypegen_stack_overflow(p);
33486
0
    }
33487
5.00k
    if (p->error_indicator) {
33488
0
        p->level--;
33489
0
        return NULL;
33490
0
    }
33491
5.00k
    asdl_seq * _res = NULL;
33492
5.00k
    int _mark = p->mark;
33493
5.00k
    { // del_target _loop0_99
33494
5.00k
        if (p->error_indicator) {
33495
0
            p->level--;
33496
0
            return NULL;
33497
0
        }
33498
5.00k
        D(fprintf(stderr, "%*c> _gather_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_target _loop0_99"));
33499
5.00k
        expr_ty elem;
33500
5.00k
        asdl_seq * seq;
33501
5.00k
        if (
33502
5.00k
            (elem = del_target_rule(p))  // del_target
33503
5.00k
            &&
33504
5.00k
            (seq = _loop0_99_rule(p))  // _loop0_99
33505
5.00k
        )
33506
2.30k
        {
33507
2.30k
            D(fprintf(stderr, "%*c+ _gather_100[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "del_target _loop0_99"));
33508
2.30k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
33509
2.30k
            goto done;
33510
2.30k
        }
33511
2.70k
        p->mark = _mark;
33512
2.70k
        D(fprintf(stderr, "%*c%s _gather_100[%d-%d]: %s failed!\n", p->level, ' ',
33513
2.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "del_target _loop0_99"));
33514
2.70k
    }
33515
0
    _res = NULL;
33516
5.00k
  done:
33517
5.00k
    p->level--;
33518
5.00k
    return _res;
33519
2.70k
}
33520
33521
// _loop0_101: ',' expression
33522
static asdl_seq *
33523
_loop0_101_rule(Parser *p)
33524
0
{
33525
0
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33526
0
        _Pypegen_stack_overflow(p);
33527
0
    }
33528
0
    if (p->error_indicator) {
33529
0
        p->level--;
33530
0
        return NULL;
33531
0
    }
33532
0
    void *_res = NULL;
33533
0
    int _mark = p->mark;
33534
0
    void **_children = PyMem_Malloc(sizeof(void *));
33535
0
    if (!_children) {
33536
0
        p->error_indicator = 1;
33537
0
        PyErr_NoMemory();
33538
0
        p->level--;
33539
0
        return NULL;
33540
0
    }
33541
0
    Py_ssize_t _children_capacity = 1;
33542
0
    Py_ssize_t _n = 0;
33543
0
    { // ',' expression
33544
0
        if (p->error_indicator) {
33545
0
            p->level--;
33546
0
            return NULL;
33547
0
        }
33548
0
        D(fprintf(stderr, "%*c> _loop0_101[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
33549
0
        Token * _literal;
33550
0
        expr_ty elem;
33551
0
        while (
33552
0
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
33553
0
            &&
33554
0
            (elem = expression_rule(p))  // expression
33555
0
        )
33556
0
        {
33557
0
            _res = elem;
33558
0
            if (_res == NULL && PyErr_Occurred()) {
33559
0
                p->error_indicator = 1;
33560
0
                PyMem_Free(_children);
33561
0
                p->level--;
33562
0
                return NULL;
33563
0
            }
33564
0
            if (_n == _children_capacity) {
33565
0
                _children_capacity *= 2;
33566
0
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33567
0
                if (!_new_children) {
33568
0
                    PyMem_Free(_children);
33569
0
                    p->error_indicator = 1;
33570
0
                    PyErr_NoMemory();
33571
0
                    p->level--;
33572
0
                    return NULL;
33573
0
                }
33574
0
                _children = _new_children;
33575
0
            }
33576
0
            _children[_n++] = _res;
33577
0
            _mark = p->mark;
33578
0
        }
33579
0
        p->mark = _mark;
33580
0
        D(fprintf(stderr, "%*c%s _loop0_101[%d-%d]: %s failed!\n", p->level, ' ',
33581
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression"));
33582
0
    }
33583
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33584
0
    if (!_seq) {
33585
0
        PyMem_Free(_children);
33586
0
        p->error_indicator = 1;
33587
0
        PyErr_NoMemory();
33588
0
        p->level--;
33589
0
        return NULL;
33590
0
    }
33591
0
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
33592
0
    PyMem_Free(_children);
33593
0
    p->level--;
33594
0
    return _seq;
33595
0
}
33596
33597
// _gather_102: expression _loop0_101
33598
static asdl_seq *
33599
_gather_102_rule(Parser *p)
33600
0
{
33601
0
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33602
0
        _Pypegen_stack_overflow(p);
33603
0
    }
33604
0
    if (p->error_indicator) {
33605
0
        p->level--;
33606
0
        return NULL;
33607
0
    }
33608
0
    asdl_seq * _res = NULL;
33609
0
    int _mark = p->mark;
33610
0
    { // expression _loop0_101
33611
0
        if (p->error_indicator) {
33612
0
            p->level--;
33613
0
            return NULL;
33614
0
        }
33615
0
        D(fprintf(stderr, "%*c> _gather_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_101"));
33616
0
        expr_ty elem;
33617
0
        asdl_seq * seq;
33618
0
        if (
33619
0
            (elem = expression_rule(p))  // expression
33620
0
            &&
33621
0
            (seq = _loop0_101_rule(p))  // _loop0_101
33622
0
        )
33623
0
        {
33624
0
            D(fprintf(stderr, "%*c+ _gather_102[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_101"));
33625
0
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
33626
0
            goto done;
33627
0
        }
33628
0
        p->mark = _mark;
33629
0
        D(fprintf(stderr, "%*c%s _gather_102[%d-%d]: %s failed!\n", p->level, ' ',
33630
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_101"));
33631
0
    }
33632
0
    _res = NULL;
33633
0
  done:
33634
0
    p->level--;
33635
0
    return _res;
33636
0
}
33637
33638
// _tmp_103: NEWLINE INDENT
33639
static void *
33640
_tmp_103_rule(Parser *p)
33641
0
{
33642
0
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33643
0
        _Pypegen_stack_overflow(p);
33644
0
    }
33645
0
    if (p->error_indicator) {
33646
0
        p->level--;
33647
0
        return NULL;
33648
0
    }
33649
0
    void * _res = NULL;
33650
0
    int _mark = p->mark;
33651
0
    { // NEWLINE INDENT
33652
0
        if (p->error_indicator) {
33653
0
            p->level--;
33654
0
            return NULL;
33655
0
        }
33656
0
        D(fprintf(stderr, "%*c> _tmp_103[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT"));
33657
0
        Token * indent_var;
33658
0
        Token * newline_var;
33659
0
        if (
33660
0
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
33661
0
            &&
33662
0
            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
33663
0
        )
33664
0
        {
33665
0
            D(fprintf(stderr, "%*c+ _tmp_103[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT"));
33666
0
            _res = _PyPegen_dummy_name(p, newline_var, indent_var);
33667
0
            goto done;
33668
0
        }
33669
0
        p->mark = _mark;
33670
0
        D(fprintf(stderr, "%*c%s _tmp_103[%d-%d]: %s failed!\n", p->level, ' ',
33671
0
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT"));
33672
0
    }
33673
0
    _res = NULL;
33674
0
  done:
33675
0
    p->level--;
33676
0
    return _res;
33677
0
}
33678
33679
// _tmp_104:
33680
//     | (','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)
33681
//     | kwargs
33682
static void *
33683
_tmp_104_rule(Parser *p)
33684
7.48k
{
33685
7.48k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33686
0
        _Pypegen_stack_overflow(p);
33687
0
    }
33688
7.48k
    if (p->error_indicator) {
33689
0
        p->level--;
33690
0
        return NULL;
33691
0
    }
33692
7.48k
    void * _res = NULL;
33693
7.48k
    int _mark = p->mark;
33694
7.48k
    { // (','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)
33695
7.48k
        if (p->error_indicator) {
33696
0
            p->level--;
33697
0
            return NULL;
33698
0
        }
33699
7.48k
        D(fprintf(stderr, "%*c> _tmp_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)"));
33700
7.48k
        void *_tmp_165_var;
33701
7.48k
        if (
33702
7.48k
            (_tmp_165_var = _tmp_165_rule(p))  // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs
33703
7.48k
        )
33704
333
        {
33705
333
            D(fprintf(stderr, "%*c+ _tmp_104[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)"));
33706
333
            _res = _tmp_165_var;
33707
333
            goto done;
33708
333
        }
33709
7.15k
        p->mark = _mark;
33710
7.15k
        D(fprintf(stderr, "%*c%s _tmp_104[%d-%d]: %s failed!\n", p->level, ' ',
33711
7.15k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)"));
33712
7.15k
    }
33713
0
    { // kwargs
33714
7.15k
        if (p->error_indicator) {
33715
0
            p->level--;
33716
0
            return NULL;
33717
0
        }
33718
7.15k
        D(fprintf(stderr, "%*c> _tmp_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs"));
33719
7.15k
        asdl_seq* kwargs_var;
33720
7.15k
        if (
33721
7.15k
            (kwargs_var = kwargs_rule(p))  // kwargs
33722
7.15k
        )
33723
2.22k
        {
33724
2.22k
            D(fprintf(stderr, "%*c+ _tmp_104[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs"));
33725
2.22k
            _res = kwargs_var;
33726
2.22k
            goto done;
33727
2.22k
        }
33728
4.92k
        p->mark = _mark;
33729
4.92k
        D(fprintf(stderr, "%*c%s _tmp_104[%d-%d]: %s failed!\n", p->level, ' ',
33730
4.92k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwargs"));
33731
4.92k
    }
33732
0
    _res = NULL;
33733
7.48k
  done:
33734
7.48k
    p->level--;
33735
7.48k
    return _res;
33736
4.92k
}
33737
33738
// _loop0_105: ',' (starred_expression !'=')
33739
static asdl_seq *
33740
_loop0_105_rule(Parser *p)
33741
305
{
33742
305
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33743
0
        _Pypegen_stack_overflow(p);
33744
0
    }
33745
305
    if (p->error_indicator) {
33746
0
        p->level--;
33747
0
        return NULL;
33748
0
    }
33749
305
    void *_res = NULL;
33750
305
    int _mark = p->mark;
33751
305
    void **_children = PyMem_Malloc(sizeof(void *));
33752
305
    if (!_children) {
33753
0
        p->error_indicator = 1;
33754
0
        PyErr_NoMemory();
33755
0
        p->level--;
33756
0
        return NULL;
33757
0
    }
33758
305
    Py_ssize_t _children_capacity = 1;
33759
305
    Py_ssize_t _n = 0;
33760
305
    { // ',' (starred_expression !'=')
33761
305
        if (p->error_indicator) {
33762
0
            p->level--;
33763
0
            return NULL;
33764
0
        }
33765
305
        D(fprintf(stderr, "%*c> _loop0_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression !'=')"));
33766
305
        Token * _literal;
33767
305
        void *elem;
33768
305
        while (
33769
735
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
33770
735
            &&
33771
735
            (elem = _tmp_166_rule(p))  // starred_expression !'='
33772
305
        )
33773
430
        {
33774
430
            _res = elem;
33775
430
            if (_res == NULL && PyErr_Occurred()) {
33776
0
                p->error_indicator = 1;
33777
0
                PyMem_Free(_children);
33778
0
                p->level--;
33779
0
                return NULL;
33780
0
            }
33781
430
            if (_n == _children_capacity) {
33782
106
                _children_capacity *= 2;
33783
106
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33784
106
                if (!_new_children) {
33785
0
                    PyMem_Free(_children);
33786
0
                    p->error_indicator = 1;
33787
0
                    PyErr_NoMemory();
33788
0
                    p->level--;
33789
0
                    return NULL;
33790
0
                }
33791
106
                _children = _new_children;
33792
106
            }
33793
430
            _children[_n++] = _res;
33794
430
            _mark = p->mark;
33795
430
        }
33796
305
        p->mark = _mark;
33797
305
        D(fprintf(stderr, "%*c%s _loop0_105[%d-%d]: %s failed!\n", p->level, ' ',
33798
305
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression !'=')"));
33799
305
    }
33800
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33801
305
    if (!_seq) {
33802
0
        PyMem_Free(_children);
33803
0
        p->error_indicator = 1;
33804
0
        PyErr_NoMemory();
33805
0
        p->level--;
33806
0
        return NULL;
33807
0
    }
33808
735
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
33809
305
    PyMem_Free(_children);
33810
305
    p->level--;
33811
305
    return _seq;
33812
305
}
33813
33814
// _gather_106: (starred_expression !'=') _loop0_105
33815
static asdl_seq *
33816
_gather_106_rule(Parser *p)
33817
1.21k
{
33818
1.21k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33819
0
        _Pypegen_stack_overflow(p);
33820
0
    }
33821
1.21k
    if (p->error_indicator) {
33822
0
        p->level--;
33823
0
        return NULL;
33824
0
    }
33825
1.21k
    asdl_seq * _res = NULL;
33826
1.21k
    int _mark = p->mark;
33827
1.21k
    { // (starred_expression !'=') _loop0_105
33828
1.21k
        if (p->error_indicator) {
33829
0
            p->level--;
33830
0
            return NULL;
33831
0
        }
33832
1.21k
        D(fprintf(stderr, "%*c> _gather_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_105"));
33833
1.21k
        void *elem;
33834
1.21k
        asdl_seq * seq;
33835
1.21k
        if (
33836
1.21k
            (elem = _tmp_166_rule(p))  // starred_expression !'='
33837
1.21k
            &&
33838
1.21k
            (seq = _loop0_105_rule(p))  // _loop0_105
33839
1.21k
        )
33840
305
        {
33841
305
            D(fprintf(stderr, "%*c+ _gather_106[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_105"));
33842
305
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
33843
305
            goto done;
33844
305
        }
33845
912
        p->mark = _mark;
33846
912
        D(fprintf(stderr, "%*c%s _gather_106[%d-%d]: %s failed!\n", p->level, ' ',
33847
912
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression !'=') _loop0_105"));
33848
912
    }
33849
0
    _res = NULL;
33850
1.21k
  done:
33851
1.21k
    p->level--;
33852
1.21k
    return _res;
33853
912
}
33854
33855
// _tmp_107: args | expression for_if_clauses
33856
static void *
33857
_tmp_107_rule(Parser *p)
33858
58
{
33859
58
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33860
0
        _Pypegen_stack_overflow(p);
33861
0
    }
33862
58
    if (p->error_indicator) {
33863
0
        p->level--;
33864
0
        return NULL;
33865
0
    }
33866
58
    void * _res = NULL;
33867
58
    int _mark = p->mark;
33868
58
    { // args
33869
58
        if (p->error_indicator) {
33870
0
            p->level--;
33871
0
            return NULL;
33872
0
        }
33873
58
        D(fprintf(stderr, "%*c> _tmp_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args"));
33874
58
        expr_ty args_var;
33875
58
        if (
33876
58
            (args_var = args_rule(p))  // args
33877
58
        )
33878
18
        {
33879
18
            D(fprintf(stderr, "%*c+ _tmp_107[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args"));
33880
18
            _res = args_var;
33881
18
            goto done;
33882
18
        }
33883
40
        p->mark = _mark;
33884
40
        D(fprintf(stderr, "%*c%s _tmp_107[%d-%d]: %s failed!\n", p->level, ' ',
33885
40
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args"));
33886
40
    }
33887
0
    { // expression for_if_clauses
33888
40
        if (p->error_indicator) {
33889
37
            p->level--;
33890
37
            return NULL;
33891
37
        }
33892
3
        D(fprintf(stderr, "%*c> _tmp_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses"));
33893
3
        expr_ty expression_var;
33894
3
        asdl_comprehension_seq* for_if_clauses_var;
33895
3
        if (
33896
3
            (expression_var = expression_rule(p))  // expression
33897
3
            &&
33898
3
            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
33899
3
        )
33900
0
        {
33901
0
            D(fprintf(stderr, "%*c+ _tmp_107[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses"));
33902
0
            _res = _PyPegen_dummy_name(p, expression_var, for_if_clauses_var);
33903
0
            goto done;
33904
0
        }
33905
3
        p->mark = _mark;
33906
3
        D(fprintf(stderr, "%*c%s _tmp_107[%d-%d]: %s failed!\n", p->level, ' ',
33907
3
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression for_if_clauses"));
33908
3
    }
33909
0
    _res = NULL;
33910
21
  done:
33911
21
    p->level--;
33912
21
    return _res;
33913
3
}
33914
33915
// _tmp_108: args ','
33916
static void *
33917
_tmp_108_rule(Parser *p)
33918
7.04k
{
33919
7.04k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33920
0
        _Pypegen_stack_overflow(p);
33921
0
    }
33922
7.04k
    if (p->error_indicator) {
33923
0
        p->level--;
33924
0
        return NULL;
33925
0
    }
33926
7.04k
    void * _res = NULL;
33927
7.04k
    int _mark = p->mark;
33928
7.04k
    { // args ','
33929
7.04k
        if (p->error_indicator) {
33930
0
            p->level--;
33931
0
            return NULL;
33932
0
        }
33933
7.04k
        D(fprintf(stderr, "%*c> _tmp_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','"));
33934
7.04k
        Token * _literal;
33935
7.04k
        expr_ty args_var;
33936
7.04k
        if (
33937
7.04k
            (args_var = args_rule(p))  // args
33938
7.04k
            &&
33939
7.04k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
33940
7.04k
        )
33941
725
        {
33942
725
            D(fprintf(stderr, "%*c+ _tmp_108[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','"));
33943
725
            _res = _PyPegen_dummy_name(p, args_var, _literal);
33944
725
            goto done;
33945
725
        }
33946
6.32k
        p->mark = _mark;
33947
6.32k
        D(fprintf(stderr, "%*c%s _tmp_108[%d-%d]: %s failed!\n", p->level, ' ',
33948
6.32k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ','"));
33949
6.32k
    }
33950
0
    _res = NULL;
33951
7.04k
  done:
33952
7.04k
    p->level--;
33953
7.04k
    return _res;
33954
6.32k
}
33955
33956
// _tmp_109: ',' | ')'
33957
static void *
33958
_tmp_109_rule(Parser *p)
33959
463
{
33960
463
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
33961
0
        _Pypegen_stack_overflow(p);
33962
0
    }
33963
463
    if (p->error_indicator) {
33964
0
        p->level--;
33965
0
        return NULL;
33966
0
    }
33967
463
    void * _res = NULL;
33968
463
    int _mark = p->mark;
33969
463
    { // ','
33970
463
        if (p->error_indicator) {
33971
0
            p->level--;
33972
0
            return NULL;
33973
0
        }
33974
463
        D(fprintf(stderr, "%*c> _tmp_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
33975
463
        Token * _literal;
33976
463
        if (
33977
463
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
33978
463
        )
33979
8
        {
33980
8
            D(fprintf(stderr, "%*c+ _tmp_109[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
33981
8
            _res = _literal;
33982
8
            goto done;
33983
8
        }
33984
455
        p->mark = _mark;
33985
455
        D(fprintf(stderr, "%*c%s _tmp_109[%d-%d]: %s failed!\n", p->level, ' ',
33986
455
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
33987
455
    }
33988
0
    { // ')'
33989
455
        if (p->error_indicator) {
33990
0
            p->level--;
33991
0
            return NULL;
33992
0
        }
33993
455
        D(fprintf(stderr, "%*c> _tmp_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
33994
455
        Token * _literal;
33995
455
        if (
33996
455
            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
33997
455
        )
33998
3
        {
33999
3
            D(fprintf(stderr, "%*c+ _tmp_109[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
34000
3
            _res = _literal;
34001
3
            goto done;
34002
3
        }
34003
452
        p->mark = _mark;
34004
452
        D(fprintf(stderr, "%*c%s _tmp_109[%d-%d]: %s failed!\n", p->level, ' ',
34005
452
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
34006
452
    }
34007
0
    _res = NULL;
34008
463
  done:
34009
463
    p->level--;
34010
463
    return _res;
34011
452
}
34012
34013
// _tmp_110: 'True' | 'False' | 'None'
34014
static void *
34015
_tmp_110_rule(Parser *p)
34016
112k
{
34017
112k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34018
0
        _Pypegen_stack_overflow(p);
34019
0
    }
34020
112k
    if (p->error_indicator) {
34021
0
        p->level--;
34022
0
        return NULL;
34023
0
    }
34024
112k
    void * _res = NULL;
34025
112k
    int _mark = p->mark;
34026
112k
    { // 'True'
34027
112k
        if (p->error_indicator) {
34028
0
            p->level--;
34029
0
            return NULL;
34030
0
        }
34031
112k
        D(fprintf(stderr, "%*c> _tmp_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
34032
112k
        Token * _keyword;
34033
112k
        if (
34034
112k
            (_keyword = _PyPegen_expect_token(p, 623))  // token='True'
34035
112k
        )
34036
219
        {
34037
219
            D(fprintf(stderr, "%*c+ _tmp_110[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
34038
219
            _res = _keyword;
34039
219
            goto done;
34040
219
        }
34041
112k
        p->mark = _mark;
34042
112k
        D(fprintf(stderr, "%*c%s _tmp_110[%d-%d]: %s failed!\n", p->level, ' ',
34043
112k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
34044
112k
    }
34045
0
    { // 'False'
34046
112k
        if (p->error_indicator) {
34047
0
            p->level--;
34048
0
            return NULL;
34049
0
        }
34050
112k
        D(fprintf(stderr, "%*c> _tmp_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
34051
112k
        Token * _keyword;
34052
112k
        if (
34053
112k
            (_keyword = _PyPegen_expect_token(p, 625))  // token='False'
34054
112k
        )
34055
210
        {
34056
210
            D(fprintf(stderr, "%*c+ _tmp_110[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
34057
210
            _res = _keyword;
34058
210
            goto done;
34059
210
        }
34060
112k
        p->mark = _mark;
34061
112k
        D(fprintf(stderr, "%*c%s _tmp_110[%d-%d]: %s failed!\n", p->level, ' ',
34062
112k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
34063
112k
    }
34064
0
    { // 'None'
34065
112k
        if (p->error_indicator) {
34066
0
            p->level--;
34067
0
            return NULL;
34068
0
        }
34069
112k
        D(fprintf(stderr, "%*c> _tmp_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
34070
112k
        Token * _keyword;
34071
112k
        if (
34072
112k
            (_keyword = _PyPegen_expect_token(p, 624))  // token='None'
34073
112k
        )
34074
230
        {
34075
230
            D(fprintf(stderr, "%*c+ _tmp_110[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
34076
230
            _res = _keyword;
34077
230
            goto done;
34078
230
        }
34079
112k
        p->mark = _mark;
34080
112k
        D(fprintf(stderr, "%*c%s _tmp_110[%d-%d]: %s failed!\n", p->level, ' ',
34081
112k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
34082
112k
    }
34083
0
    _res = NULL;
34084
112k
  done:
34085
112k
    p->level--;
34086
112k
    return _res;
34087
112k
}
34088
34089
// _tmp_111: NAME '='
34090
static void *
34091
_tmp_111_rule(Parser *p)
34092
112k
{
34093
112k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34094
0
        _Pypegen_stack_overflow(p);
34095
0
    }
34096
112k
    if (p->error_indicator) {
34097
0
        p->level--;
34098
0
        return NULL;
34099
0
    }
34100
112k
    void * _res = NULL;
34101
112k
    int _mark = p->mark;
34102
112k
    { // NAME '='
34103
112k
        if (p->error_indicator) {
34104
0
            p->level--;
34105
0
            return NULL;
34106
0
        }
34107
112k
        D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '='"));
34108
112k
        Token * _literal;
34109
112k
        expr_ty name_var;
34110
112k
        if (
34111
112k
            (name_var = _PyPegen_name_token(p))  // NAME
34112
112k
            &&
34113
112k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
34114
112k
        )
34115
20.3k
        {
34116
20.3k
            D(fprintf(stderr, "%*c+ _tmp_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '='"));
34117
20.3k
            _res = _PyPegen_dummy_name(p, name_var, _literal);
34118
20.3k
            goto done;
34119
20.3k
        }
34120
92.2k
        p->mark = _mark;
34121
92.2k
        D(fprintf(stderr, "%*c%s _tmp_111[%d-%d]: %s failed!\n", p->level, ' ',
34122
92.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '='"));
34123
92.2k
    }
34124
0
    _res = NULL;
34125
112k
  done:
34126
112k
    p->level--;
34127
112k
    return _res;
34128
92.2k
}
34129
34130
// _loop1_112: (!STRING expression_without_invalid)
34131
static asdl_seq *
34132
_loop1_112_rule(Parser *p)
34133
3.59k
{
34134
3.59k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34135
0
        _Pypegen_stack_overflow(p);
34136
0
    }
34137
3.59k
    if (p->error_indicator) {
34138
0
        p->level--;
34139
0
        return NULL;
34140
0
    }
34141
3.59k
    void *_res = NULL;
34142
3.59k
    int _mark = p->mark;
34143
3.59k
    void **_children = PyMem_Malloc(sizeof(void *));
34144
3.59k
    if (!_children) {
34145
0
        p->error_indicator = 1;
34146
0
        PyErr_NoMemory();
34147
0
        p->level--;
34148
0
        return NULL;
34149
0
    }
34150
3.59k
    Py_ssize_t _children_capacity = 1;
34151
3.59k
    Py_ssize_t _n = 0;
34152
3.59k
    { // (!STRING expression_without_invalid)
34153
3.59k
        if (p->error_indicator) {
34154
0
            p->level--;
34155
0
            return NULL;
34156
0
        }
34157
3.59k
        D(fprintf(stderr, "%*c> _loop1_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(!STRING expression_without_invalid)"));
34158
3.59k
        void *_tmp_167_var;
34159
3.59k
        while (
34160
5.48k
            (_tmp_167_var = _tmp_167_rule(p))  // !STRING expression_without_invalid
34161
3.59k
        )
34162
1.88k
        {
34163
1.88k
            _res = _tmp_167_var;
34164
1.88k
            if (_n == _children_capacity) {
34165
365
                _children_capacity *= 2;
34166
365
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
34167
365
                if (!_new_children) {
34168
0
                    PyMem_Free(_children);
34169
0
                    p->error_indicator = 1;
34170
0
                    PyErr_NoMemory();
34171
0
                    p->level--;
34172
0
                    return NULL;
34173
0
                }
34174
365
                _children = _new_children;
34175
365
            }
34176
1.88k
            _children[_n++] = _res;
34177
1.88k
            _mark = p->mark;
34178
1.88k
        }
34179
3.59k
        p->mark = _mark;
34180
3.59k
        D(fprintf(stderr, "%*c%s _loop1_112[%d-%d]: %s failed!\n", p->level, ' ',
34181
3.59k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(!STRING expression_without_invalid)"));
34182
3.59k
    }
34183
3.59k
    if (_n == 0 || p->error_indicator) {
34184
2.60k
        PyMem_Free(_children);
34185
2.60k
        p->level--;
34186
2.60k
        return NULL;
34187
2.60k
    }
34188
987
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
34189
987
    if (!_seq) {
34190
0
        PyMem_Free(_children);
34191
0
        p->error_indicator = 1;
34192
0
        PyErr_NoMemory();
34193
0
        p->level--;
34194
0
        return NULL;
34195
0
    }
34196
2.84k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
34197
987
    PyMem_Free(_children);
34198
987
    p->level--;
34199
987
    return _seq;
34200
987
}
34201
34202
// _tmp_113: NAME STRING | SOFT_KEYWORD
34203
static void *
34204
_tmp_113_rule(Parser *p)
34205
206k
{
34206
206k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34207
1
        _Pypegen_stack_overflow(p);
34208
1
    }
34209
206k
    if (p->error_indicator) {
34210
1
        p->level--;
34211
1
        return NULL;
34212
1
    }
34213
206k
    void * _res = NULL;
34214
206k
    int _mark = p->mark;
34215
206k
    { // NAME STRING
34216
206k
        if (p->error_indicator) {
34217
0
            p->level--;
34218
0
            return NULL;
34219
0
        }
34220
206k
        D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME STRING"));
34221
206k
        expr_ty name_var;
34222
206k
        expr_ty string_var;
34223
206k
        if (
34224
206k
            (name_var = _PyPegen_name_token(p))  // NAME
34225
206k
            &&
34226
206k
            (string_var = _PyPegen_string_token(p))  // STRING
34227
206k
        )
34228
335
        {
34229
335
            D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME STRING"));
34230
335
            _res = _PyPegen_dummy_name(p, name_var, string_var);
34231
335
            goto done;
34232
335
        }
34233
205k
        p->mark = _mark;
34234
205k
        D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ',
34235
205k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME STRING"));
34236
205k
    }
34237
0
    { // SOFT_KEYWORD
34238
205k
        if (p->error_indicator) {
34239
24
            p->level--;
34240
24
            return NULL;
34241
24
        }
34242
205k
        D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD"));
34243
205k
        expr_ty soft_keyword_var;
34244
205k
        if (
34245
205k
            (soft_keyword_var = _PyPegen_soft_keyword_token(p))  // SOFT_KEYWORD
34246
205k
        )
34247
3.90k
        {
34248
3.90k
            D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD"));
34249
3.90k
            _res = soft_keyword_var;
34250
3.90k
            goto done;
34251
3.90k
        }
34252
201k
        p->mark = _mark;
34253
201k
        D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ',
34254
201k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "SOFT_KEYWORD"));
34255
201k
    }
34256
0
    _res = NULL;
34257
206k
  done:
34258
206k
    p->level--;
34259
206k
    return _res;
34260
201k
}
34261
34262
// _tmp_114: 'else' | ':'
34263
static void *
34264
_tmp_114_rule(Parser *p)
34265
579
{
34266
579
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34267
0
        _Pypegen_stack_overflow(p);
34268
0
    }
34269
579
    if (p->error_indicator) {
34270
0
        p->level--;
34271
0
        return NULL;
34272
0
    }
34273
579
    void * _res = NULL;
34274
579
    int _mark = p->mark;
34275
579
    { // 'else'
34276
579
        if (p->error_indicator) {
34277
0
            p->level--;
34278
0
            return NULL;
34279
0
        }
34280
579
        D(fprintf(stderr, "%*c> _tmp_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else'"));
34281
579
        Token * _keyword;
34282
579
        if (
34283
579
            (_keyword = _PyPegen_expect_token(p, 691))  // token='else'
34284
579
        )
34285
548
        {
34286
548
            D(fprintf(stderr, "%*c+ _tmp_114[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else'"));
34287
548
            _res = _keyword;
34288
548
            goto done;
34289
548
        }
34290
31
        p->mark = _mark;
34291
31
        D(fprintf(stderr, "%*c%s _tmp_114[%d-%d]: %s failed!\n", p->level, ' ',
34292
31
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else'"));
34293
31
    }
34294
0
    { // ':'
34295
31
        if (p->error_indicator) {
34296
0
            p->level--;
34297
0
            return NULL;
34298
0
        }
34299
31
        D(fprintf(stderr, "%*c> _tmp_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
34300
31
        Token * _literal;
34301
31
        if (
34302
31
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
34303
31
        )
34304
8
        {
34305
8
            D(fprintf(stderr, "%*c+ _tmp_114[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
34306
8
            _res = _literal;
34307
8
            goto done;
34308
8
        }
34309
23
        p->mark = _mark;
34310
23
        D(fprintf(stderr, "%*c%s _tmp_114[%d-%d]: %s failed!\n", p->level, ' ',
34311
23
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
34312
23
    }
34313
0
    _res = NULL;
34314
579
  done:
34315
579
    p->level--;
34316
579
    return _res;
34317
23
}
34318
34319
// _tmp_115: pass_stmt | break_stmt | continue_stmt
34320
static void *
34321
_tmp_115_rule(Parser *p)
34322
174k
{
34323
174k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34324
0
        _Pypegen_stack_overflow(p);
34325
0
    }
34326
174k
    if (p->error_indicator) {
34327
0
        p->level--;
34328
0
        return NULL;
34329
0
    }
34330
174k
    void * _res = NULL;
34331
174k
    int _mark = p->mark;
34332
174k
    { // pass_stmt
34333
174k
        if (p->error_indicator) {
34334
0
            p->level--;
34335
0
            return NULL;
34336
0
        }
34337
174k
        D(fprintf(stderr, "%*c> _tmp_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pass_stmt"));
34338
174k
        stmt_ty pass_stmt_var;
34339
174k
        if (
34340
174k
            (pass_stmt_var = pass_stmt_rule(p))  // pass_stmt
34341
174k
        )
34342
558
        {
34343
558
            D(fprintf(stderr, "%*c+ _tmp_115[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pass_stmt"));
34344
558
            _res = pass_stmt_var;
34345
558
            goto done;
34346
558
        }
34347
174k
        p->mark = _mark;
34348
174k
        D(fprintf(stderr, "%*c%s _tmp_115[%d-%d]: %s failed!\n", p->level, ' ',
34349
174k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pass_stmt"));
34350
174k
    }
34351
0
    { // break_stmt
34352
174k
        if (p->error_indicator) {
34353
0
            p->level--;
34354
0
            return NULL;
34355
0
        }
34356
174k
        D(fprintf(stderr, "%*c> _tmp_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "break_stmt"));
34357
174k
        stmt_ty break_stmt_var;
34358
174k
        if (
34359
174k
            (break_stmt_var = break_stmt_rule(p))  // break_stmt
34360
174k
        )
34361
372
        {
34362
372
            D(fprintf(stderr, "%*c+ _tmp_115[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "break_stmt"));
34363
372
            _res = break_stmt_var;
34364
372
            goto done;
34365
372
        }
34366
174k
        p->mark = _mark;
34367
174k
        D(fprintf(stderr, "%*c%s _tmp_115[%d-%d]: %s failed!\n", p->level, ' ',
34368
174k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "break_stmt"));
34369
174k
    }
34370
0
    { // continue_stmt
34371
174k
        if (p->error_indicator) {
34372
0
            p->level--;
34373
0
            return NULL;
34374
0
        }
34375
174k
        D(fprintf(stderr, "%*c> _tmp_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "continue_stmt"));
34376
174k
        stmt_ty continue_stmt_var;
34377
174k
        if (
34378
174k
            (continue_stmt_var = continue_stmt_rule(p))  // continue_stmt
34379
174k
        )
34380
1.37k
        {
34381
1.37k
            D(fprintf(stderr, "%*c+ _tmp_115[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "continue_stmt"));
34382
1.37k
            _res = continue_stmt_var;
34383
1.37k
            goto done;
34384
1.37k
        }
34385
172k
        p->mark = _mark;
34386
172k
        D(fprintf(stderr, "%*c%s _tmp_115[%d-%d]: %s failed!\n", p->level, ' ',
34387
172k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "continue_stmt"));
34388
172k
    }
34389
0
    _res = NULL;
34390
174k
  done:
34391
174k
    p->level--;
34392
174k
    return _res;
34393
172k
}
34394
34395
// _tmp_116: '=' | ':='
34396
static void *
34397
_tmp_116_rule(Parser *p)
34398
79
{
34399
79
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34400
0
        _Pypegen_stack_overflow(p);
34401
0
    }
34402
79
    if (p->error_indicator) {
34403
0
        p->level--;
34404
0
        return NULL;
34405
0
    }
34406
79
    void * _res = NULL;
34407
79
    int _mark = p->mark;
34408
79
    { // '='
34409
79
        if (p->error_indicator) {
34410
0
            p->level--;
34411
0
            return NULL;
34412
0
        }
34413
79
        D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
34414
79
        Token * _literal;
34415
79
        if (
34416
79
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
34417
79
        )
34418
52
        {
34419
52
            D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='"));
34420
52
            _res = _literal;
34421
52
            goto done;
34422
52
        }
34423
27
        p->mark = _mark;
34424
27
        D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ',
34425
27
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='"));
34426
27
    }
34427
0
    { // ':='
34428
27
        if (p->error_indicator) {
34429
0
            p->level--;
34430
0
            return NULL;
34431
0
        }
34432
27
        D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='"));
34433
27
        Token * _literal;
34434
27
        if (
34435
27
            (_literal = _PyPegen_expect_token(p, 53))  // token=':='
34436
27
        )
34437
5
        {
34438
5
            D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='"));
34439
5
            _res = _literal;
34440
5
            goto done;
34441
5
        }
34442
22
        p->mark = _mark;
34443
22
        D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ',
34444
22
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='"));
34445
22
    }
34446
0
    _res = NULL;
34447
79
  done:
34448
79
    p->level--;
34449
79
    return _res;
34450
22
}
34451
34452
// _tmp_117: list | tuple | genexp | 'True' | 'None' | 'False'
34453
static void *
34454
_tmp_117_rule(Parser *p)
34455
77.8k
{
34456
77.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34457
0
        _Pypegen_stack_overflow(p);
34458
0
    }
34459
77.8k
    if (p->error_indicator) {
34460
0
        p->level--;
34461
0
        return NULL;
34462
0
    }
34463
77.8k
    void * _res = NULL;
34464
77.8k
    int _mark = p->mark;
34465
77.8k
    { // list
34466
77.8k
        if (p->error_indicator) {
34467
0
            p->level--;
34468
0
            return NULL;
34469
0
        }
34470
77.8k
        D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
34471
77.8k
        expr_ty list_var;
34472
77.8k
        if (
34473
77.8k
            (list_var = list_rule(p))  // list
34474
77.8k
        )
34475
815
        {
34476
815
            D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list"));
34477
815
            _res = list_var;
34478
815
            goto done;
34479
815
        }
34480
77.0k
        p->mark = _mark;
34481
77.0k
        D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ',
34482
77.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list"));
34483
77.0k
    }
34484
0
    { // tuple
34485
77.0k
        if (p->error_indicator) {
34486
68
            p->level--;
34487
68
            return NULL;
34488
68
        }
34489
76.9k
        D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
34490
76.9k
        expr_ty tuple_var;
34491
76.9k
        if (
34492
76.9k
            (tuple_var = tuple_rule(p))  // tuple
34493
76.9k
        )
34494
3.33k
        {
34495
3.33k
            D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple"));
34496
3.33k
            _res = tuple_var;
34497
3.33k
            goto done;
34498
3.33k
        }
34499
73.6k
        p->mark = _mark;
34500
73.6k
        D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ',
34501
73.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple"));
34502
73.6k
    }
34503
0
    { // genexp
34504
73.6k
        if (p->error_indicator) {
34505
198
            p->level--;
34506
198
            return NULL;
34507
198
        }
34508
73.4k
        D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp"));
34509
73.4k
        expr_ty genexp_var;
34510
73.4k
        if (
34511
73.4k
            (genexp_var = genexp_rule(p))  // genexp
34512
73.4k
        )
34513
322
        {
34514
322
            D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp"));
34515
322
            _res = genexp_var;
34516
322
            goto done;
34517
322
        }
34518
73.1k
        p->mark = _mark;
34519
73.1k
        D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ',
34520
73.1k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp"));
34521
73.1k
    }
34522
0
    { // 'True'
34523
73.1k
        if (p->error_indicator) {
34524
78
            p->level--;
34525
78
            return NULL;
34526
78
        }
34527
73.0k
        D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
34528
73.0k
        Token * _keyword;
34529
73.0k
        if (
34530
73.0k
            (_keyword = _PyPegen_expect_token(p, 623))  // token='True'
34531
73.0k
        )
34532
238
        {
34533
238
            D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
34534
238
            _res = _keyword;
34535
238
            goto done;
34536
238
        }
34537
72.8k
        p->mark = _mark;
34538
72.8k
        D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ',
34539
72.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
34540
72.8k
    }
34541
0
    { // 'None'
34542
72.8k
        if (p->error_indicator) {
34543
0
            p->level--;
34544
0
            return NULL;
34545
0
        }
34546
72.8k
        D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
34547
72.8k
        Token * _keyword;
34548
72.8k
        if (
34549
72.8k
            (_keyword = _PyPegen_expect_token(p, 624))  // token='None'
34550
72.8k
        )
34551
224
        {
34552
224
            D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
34553
224
            _res = _keyword;
34554
224
            goto done;
34555
224
        }
34556
72.6k
        p->mark = _mark;
34557
72.6k
        D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ',
34558
72.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
34559
72.6k
    }
34560
0
    { // 'False'
34561
72.6k
        if (p->error_indicator) {
34562
0
            p->level--;
34563
0
            return NULL;
34564
0
        }
34565
72.6k
        D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
34566
72.6k
        Token * _keyword;
34567
72.6k
        if (
34568
72.6k
            (_keyword = _PyPegen_expect_token(p, 625))  // token='False'
34569
72.6k
        )
34570
201
        {
34571
201
            D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
34572
201
            _res = _keyword;
34573
201
            goto done;
34574
201
        }
34575
72.4k
        p->mark = _mark;
34576
72.4k
        D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ',
34577
72.4k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
34578
72.4k
    }
34579
0
    _res = NULL;
34580
77.5k
  done:
34581
77.5k
    p->level--;
34582
77.5k
    return _res;
34583
72.4k
}
34584
34585
// _loop0_118: star_named_expressions
34586
static asdl_seq *
34587
_loop0_118_rule(Parser *p)
34588
1.68k
{
34589
1.68k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34590
0
        _Pypegen_stack_overflow(p);
34591
0
    }
34592
1.68k
    if (p->error_indicator) {
34593
0
        p->level--;
34594
0
        return NULL;
34595
0
    }
34596
1.68k
    void *_res = NULL;
34597
1.68k
    int _mark = p->mark;
34598
1.68k
    void **_children = PyMem_Malloc(sizeof(void *));
34599
1.68k
    if (!_children) {
34600
0
        p->error_indicator = 1;
34601
0
        PyErr_NoMemory();
34602
0
        p->level--;
34603
0
        return NULL;
34604
0
    }
34605
1.68k
    Py_ssize_t _children_capacity = 1;
34606
1.68k
    Py_ssize_t _n = 0;
34607
1.68k
    { // star_named_expressions
34608
1.68k
        if (p->error_indicator) {
34609
0
            p->level--;
34610
0
            return NULL;
34611
0
        }
34612
1.68k
        D(fprintf(stderr, "%*c> _loop0_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions"));
34613
1.68k
        asdl_expr_seq* star_named_expressions_var;
34614
1.68k
        while (
34615
3.77k
            (star_named_expressions_var = star_named_expressions_rule(p))  // star_named_expressions
34616
1.68k
        )
34617
2.09k
        {
34618
2.09k
            _res = star_named_expressions_var;
34619
2.09k
            if (_n == _children_capacity) {
34620
235
                _children_capacity *= 2;
34621
235
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
34622
235
                if (!_new_children) {
34623
0
                    PyMem_Free(_children);
34624
0
                    p->error_indicator = 1;
34625
0
                    PyErr_NoMemory();
34626
0
                    p->level--;
34627
0
                    return NULL;
34628
0
                }
34629
235
                _children = _new_children;
34630
235
            }
34631
2.09k
            _children[_n++] = _res;
34632
2.09k
            _mark = p->mark;
34633
2.09k
        }
34634
1.68k
        p->mark = _mark;
34635
1.68k
        D(fprintf(stderr, "%*c%s _loop0_118[%d-%d]: %s failed!\n", p->level, ' ',
34636
1.68k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expressions"));
34637
1.68k
    }
34638
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
34639
1.68k
    if (!_seq) {
34640
0
        PyMem_Free(_children);
34641
0
        p->error_indicator = 1;
34642
0
        PyErr_NoMemory();
34643
0
        p->level--;
34644
0
        return NULL;
34645
0
    }
34646
3.77k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
34647
1.68k
    PyMem_Free(_children);
34648
1.68k
    p->level--;
34649
1.68k
    return _seq;
34650
1.68k
}
34651
34652
// _loop0_119: (star_targets '=')
34653
static asdl_seq *
34654
_loop0_119_rule(Parser *p)
34655
69.6k
{
34656
69.6k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34657
0
        _Pypegen_stack_overflow(p);
34658
0
    }
34659
69.6k
    if (p->error_indicator) {
34660
0
        p->level--;
34661
0
        return NULL;
34662
0
    }
34663
69.6k
    void *_res = NULL;
34664
69.6k
    int _mark = p->mark;
34665
69.6k
    void **_children = PyMem_Malloc(sizeof(void *));
34666
69.6k
    if (!_children) {
34667
0
        p->error_indicator = 1;
34668
0
        PyErr_NoMemory();
34669
0
        p->level--;
34670
0
        return NULL;
34671
0
    }
34672
69.6k
    Py_ssize_t _children_capacity = 1;
34673
69.6k
    Py_ssize_t _n = 0;
34674
69.6k
    { // (star_targets '=')
34675
69.6k
        if (p->error_indicator) {
34676
0
            p->level--;
34677
0
            return NULL;
34678
0
        }
34679
69.6k
        D(fprintf(stderr, "%*c> _loop0_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
34680
69.6k
        void *_tmp_154_var;
34681
69.6k
        while (
34682
70.5k
            (_tmp_154_var = _tmp_154_rule(p))  // star_targets '='
34683
69.6k
        )
34684
919
        {
34685
919
            _res = _tmp_154_var;
34686
919
            if (_n == _children_capacity) {
34687
138
                _children_capacity *= 2;
34688
138
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
34689
138
                if (!_new_children) {
34690
0
                    PyMem_Free(_children);
34691
0
                    p->error_indicator = 1;
34692
0
                    PyErr_NoMemory();
34693
0
                    p->level--;
34694
0
                    return NULL;
34695
0
                }
34696
138
                _children = _new_children;
34697
138
            }
34698
919
            _children[_n++] = _res;
34699
919
            _mark = p->mark;
34700
919
        }
34701
69.6k
        p->mark = _mark;
34702
69.6k
        D(fprintf(stderr, "%*c%s _loop0_119[%d-%d]: %s failed!\n", p->level, ' ',
34703
69.6k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')"));
34704
69.6k
    }
34705
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
34706
69.6k
    if (!_seq) {
34707
0
        PyMem_Free(_children);
34708
0
        p->error_indicator = 1;
34709
0
        PyErr_NoMemory();
34710
0
        p->level--;
34711
0
        return NULL;
34712
0
    }
34713
70.5k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
34714
69.6k
    PyMem_Free(_children);
34715
69.6k
    p->level--;
34716
69.6k
    return _seq;
34717
69.6k
}
34718
34719
// _tmp_120: '[' | '(' | '{'
34720
static void *
34721
_tmp_120_rule(Parser *p)
34722
204k
{
34723
204k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34724
1
        _Pypegen_stack_overflow(p);
34725
1
    }
34726
204k
    if (p->error_indicator) {
34727
1
        p->level--;
34728
1
        return NULL;
34729
1
    }
34730
204k
    void * _res = NULL;
34731
204k
    int _mark = p->mark;
34732
204k
    { // '['
34733
204k
        if (p->error_indicator) {
34734
0
            p->level--;
34735
0
            return NULL;
34736
0
        }
34737
204k
        D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
34738
204k
        Token * _literal;
34739
204k
        if (
34740
204k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
34741
204k
        )
34742
17.6k
        {
34743
17.6k
            D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['"));
34744
17.6k
            _res = _literal;
34745
17.6k
            goto done;
34746
17.6k
        }
34747
187k
        p->mark = _mark;
34748
187k
        D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ',
34749
187k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['"));
34750
187k
    }
34751
0
    { // '('
34752
187k
        if (p->error_indicator) {
34753
0
            p->level--;
34754
0
            return NULL;
34755
0
        }
34756
187k
        D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
34757
187k
        Token * _literal;
34758
187k
        if (
34759
187k
            (_literal = _PyPegen_expect_token(p, 7))  // token='('
34760
187k
        )
34761
20.2k
        {
34762
20.2k
            D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('"));
34763
20.2k
            _res = _literal;
34764
20.2k
            goto done;
34765
20.2k
        }
34766
166k
        p->mark = _mark;
34767
166k
        D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ',
34768
166k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('"));
34769
166k
    }
34770
0
    { // '{'
34771
166k
        if (p->error_indicator) {
34772
0
            p->level--;
34773
0
            return NULL;
34774
0
        }
34775
166k
        D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'"));
34776
166k
        Token * _literal;
34777
166k
        if (
34778
166k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
34779
166k
        )
34780
6.11k
        {
34781
6.11k
            D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'"));
34782
6.11k
            _res = _literal;
34783
6.11k
            goto done;
34784
6.11k
        }
34785
160k
        p->mark = _mark;
34786
160k
        D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ',
34787
160k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'"));
34788
160k
    }
34789
0
    _res = NULL;
34790
204k
  done:
34791
204k
    p->level--;
34792
204k
    return _res;
34793
160k
}
34794
34795
// _tmp_121: '[' | '{'
34796
static void *
34797
_tmp_121_rule(Parser *p)
34798
406k
{
34799
406k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34800
0
        _Pypegen_stack_overflow(p);
34801
0
    }
34802
406k
    if (p->error_indicator) {
34803
0
        p->level--;
34804
0
        return NULL;
34805
0
    }
34806
406k
    void * _res = NULL;
34807
406k
    int _mark = p->mark;
34808
406k
    { // '['
34809
406k
        if (p->error_indicator) {
34810
0
            p->level--;
34811
0
            return NULL;
34812
0
        }
34813
406k
        D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
34814
406k
        Token * _literal;
34815
406k
        if (
34816
406k
            (_literal = _PyPegen_expect_token(p, 9))  // token='['
34817
406k
        )
34818
34.3k
        {
34819
34.3k
            D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['"));
34820
34.3k
            _res = _literal;
34821
34.3k
            goto done;
34822
34.3k
        }
34823
372k
        p->mark = _mark;
34824
372k
        D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ',
34825
372k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['"));
34826
372k
    }
34827
0
    { // '{'
34828
372k
        if (p->error_indicator) {
34829
0
            p->level--;
34830
0
            return NULL;
34831
0
        }
34832
372k
        D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'"));
34833
372k
        Token * _literal;
34834
372k
        if (
34835
372k
            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
34836
372k
        )
34837
11.1k
        {
34838
11.1k
            D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'"));
34839
11.1k
            _res = _literal;
34840
11.1k
            goto done;
34841
11.1k
        }
34842
361k
        p->mark = _mark;
34843
361k
        D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ',
34844
361k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'"));
34845
361k
    }
34846
0
    _res = NULL;
34847
406k
  done:
34848
406k
    p->level--;
34849
406k
    return _res;
34850
361k
}
34851
34852
// _tmp_122: slash_no_default | slash_with_default
34853
static void *
34854
_tmp_122_rule(Parser *p)
34855
8.62k
{
34856
8.62k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34857
0
        _Pypegen_stack_overflow(p);
34858
0
    }
34859
8.62k
    if (p->error_indicator) {
34860
0
        p->level--;
34861
0
        return NULL;
34862
0
    }
34863
8.62k
    void * _res = NULL;
34864
8.62k
    int _mark = p->mark;
34865
8.62k
    { // slash_no_default
34866
8.62k
        if (p->error_indicator) {
34867
0
            p->level--;
34868
0
            return NULL;
34869
0
        }
34870
8.62k
        D(fprintf(stderr, "%*c> _tmp_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default"));
34871
8.62k
        asdl_arg_seq* slash_no_default_var;
34872
8.62k
        if (
34873
8.62k
            (slash_no_default_var = slash_no_default_rule(p))  // slash_no_default
34874
8.62k
        )
34875
826
        {
34876
826
            D(fprintf(stderr, "%*c+ _tmp_122[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default"));
34877
826
            _res = slash_no_default_var;
34878
826
            goto done;
34879
826
        }
34880
7.80k
        p->mark = _mark;
34881
7.80k
        D(fprintf(stderr, "%*c%s _tmp_122[%d-%d]: %s failed!\n", p->level, ' ',
34882
7.80k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default"));
34883
7.80k
    }
34884
0
    { // slash_with_default
34885
7.80k
        if (p->error_indicator) {
34886
1
            p->level--;
34887
1
            return NULL;
34888
1
        }
34889
7.80k
        D(fprintf(stderr, "%*c> _tmp_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
34890
7.80k
        SlashWithDefault* slash_with_default_var;
34891
7.80k
        if (
34892
7.80k
            (slash_with_default_var = slash_with_default_rule(p))  // slash_with_default
34893
7.80k
        )
34894
848
        {
34895
848
            D(fprintf(stderr, "%*c+ _tmp_122[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
34896
848
            _res = slash_with_default_var;
34897
848
            goto done;
34898
848
        }
34899
6.95k
        p->mark = _mark;
34900
6.95k
        D(fprintf(stderr, "%*c%s _tmp_122[%d-%d]: %s failed!\n", p->level, ' ',
34901
6.95k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default"));
34902
6.95k
    }
34903
0
    _res = NULL;
34904
8.62k
  done:
34905
8.62k
    p->level--;
34906
8.62k
    return _res;
34907
6.95k
}
34908
34909
// _tmp_123: ',' | param_no_default
34910
static void *
34911
_tmp_123_rule(Parser *p)
34912
1.39k
{
34913
1.39k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34914
0
        _Pypegen_stack_overflow(p);
34915
0
    }
34916
1.39k
    if (p->error_indicator) {
34917
0
        p->level--;
34918
0
        return NULL;
34919
0
    }
34920
1.39k
    void * _res = NULL;
34921
1.39k
    int _mark = p->mark;
34922
1.39k
    { // ','
34923
1.39k
        if (p->error_indicator) {
34924
0
            p->level--;
34925
0
            return NULL;
34926
0
        }
34927
1.39k
        D(fprintf(stderr, "%*c> _tmp_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
34928
1.39k
        Token * _literal;
34929
1.39k
        if (
34930
1.39k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
34931
1.39k
        )
34932
655
        {
34933
655
            D(fprintf(stderr, "%*c+ _tmp_123[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
34934
655
            _res = _literal;
34935
655
            goto done;
34936
655
        }
34937
743
        p->mark = _mark;
34938
743
        D(fprintf(stderr, "%*c%s _tmp_123[%d-%d]: %s failed!\n", p->level, ' ',
34939
743
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
34940
743
    }
34941
0
    { // param_no_default
34942
743
        if (p->error_indicator) {
34943
0
            p->level--;
34944
0
            return NULL;
34945
0
        }
34946
743
        D(fprintf(stderr, "%*c> _tmp_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
34947
743
        arg_ty param_no_default_var;
34948
743
        if (
34949
743
            (param_no_default_var = param_no_default_rule(p))  // param_no_default
34950
743
        )
34951
354
        {
34952
354
            D(fprintf(stderr, "%*c+ _tmp_123[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default"));
34953
354
            _res = param_no_default_var;
34954
354
            goto done;
34955
354
        }
34956
389
        p->mark = _mark;
34957
389
        D(fprintf(stderr, "%*c%s _tmp_123[%d-%d]: %s failed!\n", p->level, ' ',
34958
389
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
34959
389
    }
34960
0
    _res = NULL;
34961
1.39k
  done:
34962
1.39k
    p->level--;
34963
1.39k
    return _res;
34964
389
}
34965
34966
// _tmp_124: ')' | ','
34967
static void *
34968
_tmp_124_rule(Parser *p)
34969
24.1k
{
34970
24.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
34971
0
        _Pypegen_stack_overflow(p);
34972
0
    }
34973
24.1k
    if (p->error_indicator) {
34974
0
        p->level--;
34975
0
        return NULL;
34976
0
    }
34977
24.1k
    void * _res = NULL;
34978
24.1k
    int _mark = p->mark;
34979
24.1k
    { // ')'
34980
24.1k
        if (p->error_indicator) {
34981
0
            p->level--;
34982
0
            return NULL;
34983
0
        }
34984
24.1k
        D(fprintf(stderr, "%*c> _tmp_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
34985
24.1k
        Token * _literal;
34986
24.1k
        if (
34987
24.1k
            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
34988
24.1k
        )
34989
3
        {
34990
3
            D(fprintf(stderr, "%*c+ _tmp_124[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
34991
3
            _res = _literal;
34992
3
            goto done;
34993
3
        }
34994
24.0k
        p->mark = _mark;
34995
24.0k
        D(fprintf(stderr, "%*c%s _tmp_124[%d-%d]: %s failed!\n", p->level, ' ',
34996
24.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
34997
24.0k
    }
34998
0
    { // ','
34999
24.0k
        if (p->error_indicator) {
35000
0
            p->level--;
35001
0
            return NULL;
35002
0
        }
35003
24.0k
        D(fprintf(stderr, "%*c> _tmp_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
35004
24.0k
        Token * _literal;
35005
24.0k
        if (
35006
24.0k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35007
24.0k
        )
35008
13
        {
35009
13
            D(fprintf(stderr, "%*c+ _tmp_124[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
35010
13
            _res = _literal;
35011
13
            goto done;
35012
13
        }
35013
24.0k
        p->mark = _mark;
35014
24.0k
        D(fprintf(stderr, "%*c%s _tmp_124[%d-%d]: %s failed!\n", p->level, ' ',
35015
24.0k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
35016
24.0k
    }
35017
0
    _res = NULL;
35018
24.1k
  done:
35019
24.1k
    p->level--;
35020
24.1k
    return _res;
35021
24.0k
}
35022
35023
// _tmp_125: ')' | ',' (')' | '**')
35024
static void *
35025
_tmp_125_rule(Parser *p)
35026
1.39k
{
35027
1.39k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35028
0
        _Pypegen_stack_overflow(p);
35029
0
    }
35030
1.39k
    if (p->error_indicator) {
35031
0
        p->level--;
35032
0
        return NULL;
35033
0
    }
35034
1.39k
    void * _res = NULL;
35035
1.39k
    int _mark = p->mark;
35036
1.39k
    { // ')'
35037
1.39k
        if (p->error_indicator) {
35038
0
            p->level--;
35039
0
            return NULL;
35040
0
        }
35041
1.39k
        D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
35042
1.39k
        Token * _literal;
35043
1.39k
        if (
35044
1.39k
            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
35045
1.39k
        )
35046
1
        {
35047
1
            D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
35048
1
            _res = _literal;
35049
1
            goto done;
35050
1
        }
35051
1.39k
        p->mark = _mark;
35052
1.39k
        D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ',
35053
1.39k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
35054
1.39k
    }
35055
0
    { // ',' (')' | '**')
35056
1.39k
        if (p->error_indicator) {
35057
0
            p->level--;
35058
0
            return NULL;
35059
0
        }
35060
1.39k
        D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')"));
35061
1.39k
        Token * _literal;
35062
1.39k
        void *_tmp_168_var;
35063
1.39k
        if (
35064
1.39k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35065
1.39k
            &&
35066
1.39k
            (_tmp_168_var = _tmp_168_rule(p))  // ')' | '**'
35067
1.39k
        )
35068
2
        {
35069
2
            D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')"));
35070
2
            _res = _PyPegen_dummy_name(p, _literal, _tmp_168_var);
35071
2
            goto done;
35072
2
        }
35073
1.39k
        p->mark = _mark;
35074
1.39k
        D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ',
35075
1.39k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (')' | '**')"));
35076
1.39k
    }
35077
0
    _res = NULL;
35078
1.39k
  done:
35079
1.39k
    p->level--;
35080
1.39k
    return _res;
35081
1.39k
}
35082
35083
// _tmp_126: param_no_default | ','
35084
static void *
35085
_tmp_126_rule(Parser *p)
35086
1.39k
{
35087
1.39k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35088
0
        _Pypegen_stack_overflow(p);
35089
0
    }
35090
1.39k
    if (p->error_indicator) {
35091
0
        p->level--;
35092
0
        return NULL;
35093
0
    }
35094
1.39k
    void * _res = NULL;
35095
1.39k
    int _mark = p->mark;
35096
1.39k
    { // param_no_default
35097
1.39k
        if (p->error_indicator) {
35098
0
            p->level--;
35099
0
            return NULL;
35100
0
        }
35101
1.39k
        D(fprintf(stderr, "%*c> _tmp_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
35102
1.39k
        arg_ty param_no_default_var;
35103
1.39k
        if (
35104
1.39k
            (param_no_default_var = param_no_default_rule(p))  // param_no_default
35105
1.39k
        )
35106
353
        {
35107
353
            D(fprintf(stderr, "%*c+ _tmp_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default"));
35108
353
            _res = param_no_default_var;
35109
353
            goto done;
35110
353
        }
35111
1.04k
        p->mark = _mark;
35112
1.04k
        D(fprintf(stderr, "%*c%s _tmp_126[%d-%d]: %s failed!\n", p->level, ' ',
35113
1.04k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
35114
1.04k
    }
35115
0
    { // ','
35116
1.04k
        if (p->error_indicator) {
35117
1
            p->level--;
35118
1
            return NULL;
35119
1
        }
35120
1.04k
        D(fprintf(stderr, "%*c> _tmp_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
35121
1.04k
        Token * _literal;
35122
1.04k
        if (
35123
1.04k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35124
1.04k
        )
35125
653
        {
35126
653
            D(fprintf(stderr, "%*c+ _tmp_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
35127
653
            _res = _literal;
35128
653
            goto done;
35129
653
        }
35130
391
        p->mark = _mark;
35131
391
        D(fprintf(stderr, "%*c%s _tmp_126[%d-%d]: %s failed!\n", p->level, ' ',
35132
391
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
35133
391
    }
35134
0
    _res = NULL;
35135
1.39k
  done:
35136
1.39k
    p->level--;
35137
1.39k
    return _res;
35138
391
}
35139
35140
// _tmp_127: '*' | '**' | '/'
35141
static void *
35142
_tmp_127_rule(Parser *p)
35143
46
{
35144
46
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35145
0
        _Pypegen_stack_overflow(p);
35146
0
    }
35147
46
    if (p->error_indicator) {
35148
0
        p->level--;
35149
0
        return NULL;
35150
0
    }
35151
46
    void * _res = NULL;
35152
46
    int _mark = p->mark;
35153
46
    { // '*'
35154
46
        if (p->error_indicator) {
35155
0
            p->level--;
35156
0
            return NULL;
35157
0
        }
35158
46
        D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
35159
46
        Token * _literal;
35160
46
        if (
35161
46
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
35162
46
        )
35163
1
        {
35164
1
            D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
35165
1
            _res = _literal;
35166
1
            goto done;
35167
1
        }
35168
45
        p->mark = _mark;
35169
45
        D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ',
35170
45
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'"));
35171
45
    }
35172
0
    { // '**'
35173
45
        if (p->error_indicator) {
35174
0
            p->level--;
35175
0
            return NULL;
35176
0
        }
35177
45
        D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
35178
45
        Token * _literal;
35179
45
        if (
35180
45
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
35181
45
        )
35182
1
        {
35183
1
            D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'"));
35184
1
            _res = _literal;
35185
1
            goto done;
35186
1
        }
35187
44
        p->mark = _mark;
35188
44
        D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ',
35189
44
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'"));
35190
44
    }
35191
0
    { // '/'
35192
44
        if (p->error_indicator) {
35193
0
            p->level--;
35194
0
            return NULL;
35195
0
        }
35196
44
        D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'"));
35197
44
        Token * _literal;
35198
44
        if (
35199
44
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
35200
44
        )
35201
1
        {
35202
1
            D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'"));
35203
1
            _res = _literal;
35204
1
            goto done;
35205
1
        }
35206
43
        p->mark = _mark;
35207
43
        D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ',
35208
43
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'"));
35209
43
    }
35210
0
    _res = NULL;
35211
46
  done:
35212
46
    p->level--;
35213
46
    return _res;
35214
43
}
35215
35216
// _tmp_128: lambda_slash_no_default | lambda_slash_with_default
35217
static void *
35218
_tmp_128_rule(Parser *p)
35219
15.0k
{
35220
15.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35221
0
        _Pypegen_stack_overflow(p);
35222
0
    }
35223
15.0k
    if (p->error_indicator) {
35224
0
        p->level--;
35225
0
        return NULL;
35226
0
    }
35227
15.0k
    void * _res = NULL;
35228
15.0k
    int _mark = p->mark;
35229
15.0k
    { // lambda_slash_no_default
35230
15.0k
        if (p->error_indicator) {
35231
0
            p->level--;
35232
0
            return NULL;
35233
0
        }
35234
15.0k
        D(fprintf(stderr, "%*c> _tmp_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default"));
35235
15.0k
        asdl_arg_seq* lambda_slash_no_default_var;
35236
15.0k
        if (
35237
15.0k
            (lambda_slash_no_default_var = lambda_slash_no_default_rule(p))  // lambda_slash_no_default
35238
15.0k
        )
35239
787
        {
35240
787
            D(fprintf(stderr, "%*c+ _tmp_128[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default"));
35241
787
            _res = lambda_slash_no_default_var;
35242
787
            goto done;
35243
787
        }
35244
14.2k
        p->mark = _mark;
35245
14.2k
        D(fprintf(stderr, "%*c%s _tmp_128[%d-%d]: %s failed!\n", p->level, ' ',
35246
14.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default"));
35247
14.2k
    }
35248
0
    { // lambda_slash_with_default
35249
14.2k
        if (p->error_indicator) {
35250
2
            p->level--;
35251
2
            return NULL;
35252
2
        }
35253
14.2k
        D(fprintf(stderr, "%*c> _tmp_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
35254
14.2k
        SlashWithDefault* lambda_slash_with_default_var;
35255
14.2k
        if (
35256
14.2k
            (lambda_slash_with_default_var = lambda_slash_with_default_rule(p))  // lambda_slash_with_default
35257
14.2k
        )
35258
1.42k
        {
35259
1.42k
            D(fprintf(stderr, "%*c+ _tmp_128[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
35260
1.42k
            _res = lambda_slash_with_default_var;
35261
1.42k
            goto done;
35262
1.42k
        }
35263
12.8k
        p->mark = _mark;
35264
12.8k
        D(fprintf(stderr, "%*c%s _tmp_128[%d-%d]: %s failed!\n", p->level, ' ',
35265
12.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default"));
35266
12.8k
    }
35267
0
    _res = NULL;
35268
15.0k
  done:
35269
15.0k
    p->level--;
35270
15.0k
    return _res;
35271
12.8k
}
35272
35273
// _loop0_129: ',' lambda_param
35274
static asdl_seq *
35275
_loop0_129_rule(Parser *p)
35276
55
{
35277
55
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35278
0
        _Pypegen_stack_overflow(p);
35279
0
    }
35280
55
    if (p->error_indicator) {
35281
0
        p->level--;
35282
0
        return NULL;
35283
0
    }
35284
55
    void *_res = NULL;
35285
55
    int _mark = p->mark;
35286
55
    void **_children = PyMem_Malloc(sizeof(void *));
35287
55
    if (!_children) {
35288
0
        p->error_indicator = 1;
35289
0
        PyErr_NoMemory();
35290
0
        p->level--;
35291
0
        return NULL;
35292
0
    }
35293
55
    Py_ssize_t _children_capacity = 1;
35294
55
    Py_ssize_t _n = 0;
35295
55
    { // ',' lambda_param
35296
55
        if (p->error_indicator) {
35297
0
            p->level--;
35298
0
            return NULL;
35299
0
        }
35300
55
        D(fprintf(stderr, "%*c> _loop0_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' lambda_param"));
35301
55
        Token * _literal;
35302
55
        arg_ty elem;
35303
55
        while (
35304
6.65k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35305
6.65k
            &&
35306
6.65k
            (elem = lambda_param_rule(p))  // lambda_param
35307
55
        )
35308
6.59k
        {
35309
6.59k
            _res = elem;
35310
6.59k
            if (_res == NULL && PyErr_Occurred()) {
35311
0
                p->error_indicator = 1;
35312
0
                PyMem_Free(_children);
35313
0
                p->level--;
35314
0
                return NULL;
35315
0
            }
35316
6.59k
            if (_n == _children_capacity) {
35317
168
                _children_capacity *= 2;
35318
168
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
35319
168
                if (!_new_children) {
35320
0
                    PyMem_Free(_children);
35321
0
                    p->error_indicator = 1;
35322
0
                    PyErr_NoMemory();
35323
0
                    p->level--;
35324
0
                    return NULL;
35325
0
                }
35326
168
                _children = _new_children;
35327
168
            }
35328
6.59k
            _children[_n++] = _res;
35329
6.59k
            _mark = p->mark;
35330
6.59k
        }
35331
55
        p->mark = _mark;
35332
55
        D(fprintf(stderr, "%*c%s _loop0_129[%d-%d]: %s failed!\n", p->level, ' ',
35333
55
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' lambda_param"));
35334
55
    }
35335
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
35336
55
    if (!_seq) {
35337
0
        PyMem_Free(_children);
35338
0
        p->error_indicator = 1;
35339
0
        PyErr_NoMemory();
35340
0
        p->level--;
35341
0
        return NULL;
35342
0
    }
35343
6.65k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
35344
55
    PyMem_Free(_children);
35345
55
    p->level--;
35346
55
    return _seq;
35347
55
}
35348
35349
// _gather_130: lambda_param _loop0_129
35350
static asdl_seq *
35351
_gather_130_rule(Parser *p)
35352
61
{
35353
61
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35354
0
        _Pypegen_stack_overflow(p);
35355
0
    }
35356
61
    if (p->error_indicator) {
35357
0
        p->level--;
35358
0
        return NULL;
35359
0
    }
35360
61
    asdl_seq * _res = NULL;
35361
61
    int _mark = p->mark;
35362
61
    { // lambda_param _loop0_129
35363
61
        if (p->error_indicator) {
35364
0
            p->level--;
35365
0
            return NULL;
35366
0
        }
35367
61
        D(fprintf(stderr, "%*c> _gather_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_129"));
35368
61
        arg_ty elem;
35369
61
        asdl_seq * seq;
35370
61
        if (
35371
61
            (elem = lambda_param_rule(p))  // lambda_param
35372
61
            &&
35373
61
            (seq = _loop0_129_rule(p))  // _loop0_129
35374
61
        )
35375
55
        {
35376
55
            D(fprintf(stderr, "%*c+ _gather_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_129"));
35377
55
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
35378
55
            goto done;
35379
55
        }
35380
6
        p->mark = _mark;
35381
6
        D(fprintf(stderr, "%*c%s _gather_130[%d-%d]: %s failed!\n", p->level, ' ',
35382
6
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param _loop0_129"));
35383
6
    }
35384
0
    _res = NULL;
35385
61
  done:
35386
61
    p->level--;
35387
61
    return _res;
35388
6
}
35389
35390
// _tmp_131: ',' | lambda_param_no_default
35391
static void *
35392
_tmp_131_rule(Parser *p)
35393
2.56k
{
35394
2.56k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35395
0
        _Pypegen_stack_overflow(p);
35396
0
    }
35397
2.56k
    if (p->error_indicator) {
35398
0
        p->level--;
35399
0
        return NULL;
35400
0
    }
35401
2.56k
    void * _res = NULL;
35402
2.56k
    int _mark = p->mark;
35403
2.56k
    { // ','
35404
2.56k
        if (p->error_indicator) {
35405
0
            p->level--;
35406
0
            return NULL;
35407
0
        }
35408
2.56k
        D(fprintf(stderr, "%*c> _tmp_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
35409
2.56k
        Token * _literal;
35410
2.56k
        if (
35411
2.56k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35412
2.56k
        )
35413
1.45k
        {
35414
1.45k
            D(fprintf(stderr, "%*c+ _tmp_131[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
35415
1.45k
            _res = _literal;
35416
1.45k
            goto done;
35417
1.45k
        }
35418
1.11k
        p->mark = _mark;
35419
1.11k
        D(fprintf(stderr, "%*c%s _tmp_131[%d-%d]: %s failed!\n", p->level, ' ',
35420
1.11k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
35421
1.11k
    }
35422
0
    { // lambda_param_no_default
35423
1.11k
        if (p->error_indicator) {
35424
1
            p->level--;
35425
1
            return NULL;
35426
1
        }
35427
1.11k
        D(fprintf(stderr, "%*c> _tmp_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
35428
1.11k
        arg_ty lambda_param_no_default_var;
35429
1.11k
        if (
35430
1.11k
            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
35431
1.11k
        )
35432
697
        {
35433
697
            D(fprintf(stderr, "%*c+ _tmp_131[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
35434
697
            _res = lambda_param_no_default_var;
35435
697
            goto done;
35436
697
        }
35437
413
        p->mark = _mark;
35438
413
        D(fprintf(stderr, "%*c%s _tmp_131[%d-%d]: %s failed!\n", p->level, ' ',
35439
413
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
35440
413
    }
35441
0
    _res = NULL;
35442
2.56k
  done:
35443
2.56k
    p->level--;
35444
2.56k
    return _res;
35445
413
}
35446
35447
// _tmp_132: ':' | ',' (':' | '**')
35448
static void *
35449
_tmp_132_rule(Parser *p)
35450
2.34k
{
35451
2.34k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35452
0
        _Pypegen_stack_overflow(p);
35453
0
    }
35454
2.34k
    if (p->error_indicator) {
35455
0
        p->level--;
35456
0
        return NULL;
35457
0
    }
35458
2.34k
    void * _res = NULL;
35459
2.34k
    int _mark = p->mark;
35460
2.34k
    { // ':'
35461
2.34k
        if (p->error_indicator) {
35462
0
            p->level--;
35463
0
            return NULL;
35464
0
        }
35465
2.34k
        D(fprintf(stderr, "%*c> _tmp_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
35466
2.34k
        Token * _literal;
35467
2.34k
        if (
35468
2.34k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
35469
2.34k
        )
35470
4
        {
35471
4
            D(fprintf(stderr, "%*c+ _tmp_132[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
35472
4
            _res = _literal;
35473
4
            goto done;
35474
4
        }
35475
2.33k
        p->mark = _mark;
35476
2.33k
        D(fprintf(stderr, "%*c%s _tmp_132[%d-%d]: %s failed!\n", p->level, ' ',
35477
2.33k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
35478
2.33k
    }
35479
0
    { // ',' (':' | '**')
35480
2.33k
        if (p->error_indicator) {
35481
0
            p->level--;
35482
0
            return NULL;
35483
0
        }
35484
2.33k
        D(fprintf(stderr, "%*c> _tmp_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')"));
35485
2.33k
        Token * _literal;
35486
2.33k
        void *_tmp_169_var;
35487
2.33k
        if (
35488
2.33k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35489
2.33k
            &&
35490
2.33k
            (_tmp_169_var = _tmp_169_rule(p))  // ':' | '**'
35491
2.33k
        )
35492
4
        {
35493
4
            D(fprintf(stderr, "%*c+ _tmp_132[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')"));
35494
4
            _res = _PyPegen_dummy_name(p, _literal, _tmp_169_var);
35495
4
            goto done;
35496
4
        }
35497
2.33k
        p->mark = _mark;
35498
2.33k
        D(fprintf(stderr, "%*c%s _tmp_132[%d-%d]: %s failed!\n", p->level, ' ',
35499
2.33k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (':' | '**')"));
35500
2.33k
    }
35501
0
    _res = NULL;
35502
2.34k
  done:
35503
2.34k
    p->level--;
35504
2.34k
    return _res;
35505
2.33k
}
35506
35507
// _tmp_133: lambda_param_no_default | ','
35508
static void *
35509
_tmp_133_rule(Parser *p)
35510
2.51k
{
35511
2.51k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35512
0
        _Pypegen_stack_overflow(p);
35513
0
    }
35514
2.51k
    if (p->error_indicator) {
35515
0
        p->level--;
35516
0
        return NULL;
35517
0
    }
35518
2.51k
    void * _res = NULL;
35519
2.51k
    int _mark = p->mark;
35520
2.51k
    { // lambda_param_no_default
35521
2.51k
        if (p->error_indicator) {
35522
0
            p->level--;
35523
0
            return NULL;
35524
0
        }
35525
2.51k
        D(fprintf(stderr, "%*c> _tmp_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
35526
2.51k
        arg_ty lambda_param_no_default_var;
35527
2.51k
        if (
35528
2.51k
            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
35529
2.51k
        )
35530
692
        {
35531
692
            D(fprintf(stderr, "%*c+ _tmp_133[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
35532
692
            _res = lambda_param_no_default_var;
35533
692
            goto done;
35534
692
        }
35535
1.81k
        p->mark = _mark;
35536
1.81k
        D(fprintf(stderr, "%*c%s _tmp_133[%d-%d]: %s failed!\n", p->level, ' ',
35537
1.81k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
35538
1.81k
    }
35539
0
    { // ','
35540
1.81k
        if (p->error_indicator) {
35541
1
            p->level--;
35542
1
            return NULL;
35543
1
        }
35544
1.81k
        D(fprintf(stderr, "%*c> _tmp_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
35545
1.81k
        Token * _literal;
35546
1.81k
        if (
35547
1.81k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35548
1.81k
        )
35549
1.23k
        {
35550
1.23k
            D(fprintf(stderr, "%*c+ _tmp_133[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
35551
1.23k
            _res = _literal;
35552
1.23k
            goto done;
35553
1.23k
        }
35554
582
        p->mark = _mark;
35555
582
        D(fprintf(stderr, "%*c%s _tmp_133[%d-%d]: %s failed!\n", p->level, ' ',
35556
582
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
35557
582
    }
35558
0
    _res = NULL;
35559
2.50k
  done:
35560
2.50k
    p->level--;
35561
2.50k
    return _res;
35562
582
}
35563
35564
// _tmp_134: bitwise_or ((',' bitwise_or))* ','?
35565
static void *
35566
_tmp_134_rule(Parser *p)
35567
2.14k
{
35568
2.14k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35569
0
        _Pypegen_stack_overflow(p);
35570
0
    }
35571
2.14k
    if (p->error_indicator) {
35572
0
        p->level--;
35573
0
        return NULL;
35574
0
    }
35575
2.14k
    void * _res = NULL;
35576
2.14k
    int _mark = p->mark;
35577
2.14k
    { // bitwise_or ((',' bitwise_or))* ','?
35578
2.14k
        if (p->error_indicator) {
35579
0
            p->level--;
35580
0
            return NULL;
35581
0
        }
35582
2.14k
        D(fprintf(stderr, "%*c> _tmp_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?"));
35583
2.14k
        asdl_seq * _loop0_170_var;
35584
2.14k
        void *_opt_var;
35585
2.14k
        UNUSED(_opt_var); // Silence compiler warnings
35586
2.14k
        expr_ty bitwise_or_var;
35587
2.14k
        if (
35588
2.14k
            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
35589
2.14k
            &&
35590
2.14k
            (_loop0_170_var = _loop0_170_rule(p))  // ((',' bitwise_or))*
35591
2.14k
            &&
35592
2.14k
            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
35593
2.14k
        )
35594
87
        {
35595
87
            D(fprintf(stderr, "%*c+ _tmp_134[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?"));
35596
87
            _res = _PyPegen_dummy_name(p, bitwise_or_var, _loop0_170_var, _opt_var);
35597
87
            goto done;
35598
87
        }
35599
2.06k
        p->mark = _mark;
35600
2.06k
        D(fprintf(stderr, "%*c%s _tmp_134[%d-%d]: %s failed!\n", p->level, ' ',
35601
2.06k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?"));
35602
2.06k
    }
35603
0
    _res = NULL;
35604
2.14k
  done:
35605
2.14k
    p->level--;
35606
2.14k
    return _res;
35607
2.06k
}
35608
35609
// _loop0_135: ',' dotted_name
35610
static asdl_seq *
35611
_loop0_135_rule(Parser *p)
35612
621
{
35613
621
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35614
0
        _Pypegen_stack_overflow(p);
35615
0
    }
35616
621
    if (p->error_indicator) {
35617
0
        p->level--;
35618
0
        return NULL;
35619
0
    }
35620
621
    void *_res = NULL;
35621
621
    int _mark = p->mark;
35622
621
    void **_children = PyMem_Malloc(sizeof(void *));
35623
621
    if (!_children) {
35624
0
        p->error_indicator = 1;
35625
0
        PyErr_NoMemory();
35626
0
        p->level--;
35627
0
        return NULL;
35628
0
    }
35629
621
    Py_ssize_t _children_capacity = 1;
35630
621
    Py_ssize_t _n = 0;
35631
621
    { // ',' dotted_name
35632
621
        if (p->error_indicator) {
35633
0
            p->level--;
35634
0
            return NULL;
35635
0
        }
35636
621
        D(fprintf(stderr, "%*c> _loop0_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_name"));
35637
621
        Token * _literal;
35638
621
        expr_ty elem;
35639
621
        while (
35640
2.15k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35641
2.15k
            &&
35642
2.15k
            (elem = dotted_name_rule(p))  // dotted_name
35643
621
        )
35644
1.53k
        {
35645
1.53k
            _res = elem;
35646
1.53k
            if (_res == NULL && PyErr_Occurred()) {
35647
0
                p->error_indicator = 1;
35648
0
                PyMem_Free(_children);
35649
0
                p->level--;
35650
0
                return NULL;
35651
0
            }
35652
1.53k
            if (_n == _children_capacity) {
35653
437
                _children_capacity *= 2;
35654
437
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
35655
437
                if (!_new_children) {
35656
0
                    PyMem_Free(_children);
35657
0
                    p->error_indicator = 1;
35658
0
                    PyErr_NoMemory();
35659
0
                    p->level--;
35660
0
                    return NULL;
35661
0
                }
35662
437
                _children = _new_children;
35663
437
            }
35664
1.53k
            _children[_n++] = _res;
35665
1.53k
            _mark = p->mark;
35666
1.53k
        }
35667
621
        p->mark = _mark;
35668
621
        D(fprintf(stderr, "%*c%s _loop0_135[%d-%d]: %s failed!\n", p->level, ' ',
35669
621
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_name"));
35670
621
    }
35671
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
35672
621
    if (!_seq) {
35673
0
        PyMem_Free(_children);
35674
0
        p->error_indicator = 1;
35675
0
        PyErr_NoMemory();
35676
0
        p->level--;
35677
0
        return NULL;
35678
0
    }
35679
2.15k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
35680
621
    PyMem_Free(_children);
35681
621
    p->level--;
35682
621
    return _seq;
35683
621
}
35684
35685
// _gather_136: dotted_name _loop0_135
35686
static asdl_seq *
35687
_gather_136_rule(Parser *p)
35688
626
{
35689
626
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35690
0
        _Pypegen_stack_overflow(p);
35691
0
    }
35692
626
    if (p->error_indicator) {
35693
0
        p->level--;
35694
0
        return NULL;
35695
0
    }
35696
626
    asdl_seq * _res = NULL;
35697
626
    int _mark = p->mark;
35698
626
    { // dotted_name _loop0_135
35699
626
        if (p->error_indicator) {
35700
0
            p->level--;
35701
0
            return NULL;
35702
0
        }
35703
626
        D(fprintf(stderr, "%*c> _gather_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_135"));
35704
626
        expr_ty elem;
35705
626
        asdl_seq * seq;
35706
626
        if (
35707
626
            (elem = dotted_name_rule(p))  // dotted_name
35708
626
            &&
35709
626
            (seq = _loop0_135_rule(p))  // _loop0_135
35710
626
        )
35711
621
        {
35712
621
            D(fprintf(stderr, "%*c+ _gather_136[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_135"));
35713
621
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
35714
621
            goto done;
35715
621
        }
35716
5
        p->mark = _mark;
35717
5
        D(fprintf(stderr, "%*c%s _gather_136[%d-%d]: %s failed!\n", p->level, ' ',
35718
5
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name _loop0_135"));
35719
5
    }
35720
0
    _res = NULL;
35721
626
  done:
35722
626
    p->level--;
35723
626
    return _res;
35724
5
}
35725
35726
// _tmp_137: NAME (',' | ')' | NEWLINE)
35727
static void *
35728
_tmp_137_rule(Parser *p)
35729
470
{
35730
470
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35731
0
        _Pypegen_stack_overflow(p);
35732
0
    }
35733
470
    if (p->error_indicator) {
35734
0
        p->level--;
35735
0
        return NULL;
35736
0
    }
35737
470
    void * _res = NULL;
35738
470
    int _mark = p->mark;
35739
470
    { // NAME (',' | ')' | NEWLINE)
35740
470
        if (p->error_indicator) {
35741
0
            p->level--;
35742
0
            return NULL;
35743
0
        }
35744
470
        D(fprintf(stderr, "%*c> _tmp_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME (',' | ')' | NEWLINE)"));
35745
470
        void *_tmp_171_var;
35746
470
        expr_ty name_var;
35747
470
        if (
35748
470
            (name_var = _PyPegen_name_token(p))  // NAME
35749
470
            &&
35750
470
            (_tmp_171_var = _tmp_171_rule(p))  // ',' | ')' | NEWLINE
35751
470
        )
35752
435
        {
35753
435
            D(fprintf(stderr, "%*c+ _tmp_137[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME (',' | ')' | NEWLINE)"));
35754
435
            _res = _PyPegen_dummy_name(p, name_var, _tmp_171_var);
35755
435
            goto done;
35756
435
        }
35757
35
        p->mark = _mark;
35758
35
        D(fprintf(stderr, "%*c%s _tmp_137[%d-%d]: %s failed!\n", p->level, ' ',
35759
35
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME (',' | ')' | NEWLINE)"));
35760
35
    }
35761
0
    _res = NULL;
35762
470
  done:
35763
470
    p->level--;
35764
470
    return _res;
35765
35
}
35766
35767
// _loop0_138: ',' (expression ['as' star_target])
35768
static asdl_seq *
35769
_loop0_138_rule(Parser *p)
35770
1.74k
{
35771
1.74k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35772
0
        _Pypegen_stack_overflow(p);
35773
0
    }
35774
1.74k
    if (p->error_indicator) {
35775
0
        p->level--;
35776
0
        return NULL;
35777
0
    }
35778
1.74k
    void *_res = NULL;
35779
1.74k
    int _mark = p->mark;
35780
1.74k
    void **_children = PyMem_Malloc(sizeof(void *));
35781
1.74k
    if (!_children) {
35782
0
        p->error_indicator = 1;
35783
0
        PyErr_NoMemory();
35784
0
        p->level--;
35785
0
        return NULL;
35786
0
    }
35787
1.74k
    Py_ssize_t _children_capacity = 1;
35788
1.74k
    Py_ssize_t _n = 0;
35789
1.74k
    { // ',' (expression ['as' star_target])
35790
1.74k
        if (p->error_indicator) {
35791
0
            p->level--;
35792
0
            return NULL;
35793
0
        }
35794
1.74k
        D(fprintf(stderr, "%*c> _loop0_138[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])"));
35795
1.74k
        Token * _literal;
35796
1.74k
        void *elem;
35797
1.74k
        while (
35798
3.81k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35799
3.81k
            &&
35800
3.81k
            (elem = _tmp_172_rule(p))  // expression ['as' star_target]
35801
1.74k
        )
35802
2.07k
        {
35803
2.07k
            _res = elem;
35804
2.07k
            if (_res == NULL && PyErr_Occurred()) {
35805
0
                p->error_indicator = 1;
35806
0
                PyMem_Free(_children);
35807
0
                p->level--;
35808
0
                return NULL;
35809
0
            }
35810
2.07k
            if (_n == _children_capacity) {
35811
686
                _children_capacity *= 2;
35812
686
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
35813
686
                if (!_new_children) {
35814
0
                    PyMem_Free(_children);
35815
0
                    p->error_indicator = 1;
35816
0
                    PyErr_NoMemory();
35817
0
                    p->level--;
35818
0
                    return NULL;
35819
0
                }
35820
686
                _children = _new_children;
35821
686
            }
35822
2.07k
            _children[_n++] = _res;
35823
2.07k
            _mark = p->mark;
35824
2.07k
        }
35825
1.74k
        p->mark = _mark;
35826
1.74k
        D(fprintf(stderr, "%*c%s _loop0_138[%d-%d]: %s failed!\n", p->level, ' ',
35827
1.74k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])"));
35828
1.74k
    }
35829
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
35830
1.74k
    if (!_seq) {
35831
0
        PyMem_Free(_children);
35832
0
        p->error_indicator = 1;
35833
0
        PyErr_NoMemory();
35834
0
        p->level--;
35835
0
        return NULL;
35836
0
    }
35837
3.81k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
35838
1.74k
    PyMem_Free(_children);
35839
1.74k
    p->level--;
35840
1.74k
    return _seq;
35841
1.74k
}
35842
35843
// _gather_139: (expression ['as' star_target]) _loop0_138
35844
static asdl_seq *
35845
_gather_139_rule(Parser *p)
35846
2.07k
{
35847
2.07k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35848
0
        _Pypegen_stack_overflow(p);
35849
0
    }
35850
2.07k
    if (p->error_indicator) {
35851
0
        p->level--;
35852
0
        return NULL;
35853
0
    }
35854
2.07k
    asdl_seq * _res = NULL;
35855
2.07k
    int _mark = p->mark;
35856
2.07k
    { // (expression ['as' star_target]) _loop0_138
35857
2.07k
        if (p->error_indicator) {
35858
0
            p->level--;
35859
0
            return NULL;
35860
0
        }
35861
2.07k
        D(fprintf(stderr, "%*c> _gather_139[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_138"));
35862
2.07k
        void *elem;
35863
2.07k
        asdl_seq * seq;
35864
2.07k
        if (
35865
2.07k
            (elem = _tmp_172_rule(p))  // expression ['as' star_target]
35866
2.07k
            &&
35867
2.07k
            (seq = _loop0_138_rule(p))  // _loop0_138
35868
2.07k
        )
35869
1.74k
        {
35870
1.74k
            D(fprintf(stderr, "%*c+ _gather_139[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_138"));
35871
1.74k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
35872
1.74k
            goto done;
35873
1.74k
        }
35874
324
        p->mark = _mark;
35875
324
        D(fprintf(stderr, "%*c%s _gather_139[%d-%d]: %s failed!\n", p->level, ' ',
35876
324
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_138"));
35877
324
    }
35878
0
    _res = NULL;
35879
2.07k
  done:
35880
2.07k
    p->level--;
35881
2.07k
    return _res;
35882
324
}
35883
35884
// _loop0_140: ',' (expressions ['as' star_target])
35885
static asdl_seq *
35886
_loop0_140_rule(Parser *p)
35887
1.10k
{
35888
1.10k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35889
0
        _Pypegen_stack_overflow(p);
35890
0
    }
35891
1.10k
    if (p->error_indicator) {
35892
0
        p->level--;
35893
0
        return NULL;
35894
0
    }
35895
1.10k
    void *_res = NULL;
35896
1.10k
    int _mark = p->mark;
35897
1.10k
    void **_children = PyMem_Malloc(sizeof(void *));
35898
1.10k
    if (!_children) {
35899
0
        p->error_indicator = 1;
35900
0
        PyErr_NoMemory();
35901
0
        p->level--;
35902
0
        return NULL;
35903
0
    }
35904
1.10k
    Py_ssize_t _children_capacity = 1;
35905
1.10k
    Py_ssize_t _n = 0;
35906
1.10k
    { // ',' (expressions ['as' star_target])
35907
1.10k
        if (p->error_indicator) {
35908
0
            p->level--;
35909
0
            return NULL;
35910
0
        }
35911
1.10k
        D(fprintf(stderr, "%*c> _loop0_140[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])"));
35912
1.10k
        Token * _literal;
35913
1.10k
        void *elem;
35914
1.10k
        while (
35915
2.21k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
35916
2.21k
            &&
35917
2.21k
            (elem = _tmp_173_rule(p))  // expressions ['as' star_target]
35918
1.10k
        )
35919
1.10k
        {
35920
1.10k
            _res = elem;
35921
1.10k
            if (_res == NULL && PyErr_Occurred()) {
35922
0
                p->error_indicator = 1;
35923
0
                PyMem_Free(_children);
35924
0
                p->level--;
35925
0
                return NULL;
35926
0
            }
35927
1.10k
            if (_n == _children_capacity) {
35928
214
                _children_capacity *= 2;
35929
214
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
35930
214
                if (!_new_children) {
35931
0
                    PyMem_Free(_children);
35932
0
                    p->error_indicator = 1;
35933
0
                    PyErr_NoMemory();
35934
0
                    p->level--;
35935
0
                    return NULL;
35936
0
                }
35937
214
                _children = _new_children;
35938
214
            }
35939
1.10k
            _children[_n++] = _res;
35940
1.10k
            _mark = p->mark;
35941
1.10k
        }
35942
1.10k
        p->mark = _mark;
35943
1.10k
        D(fprintf(stderr, "%*c%s _loop0_140[%d-%d]: %s failed!\n", p->level, ' ',
35944
1.10k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])"));
35945
1.10k
    }
35946
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
35947
1.10k
    if (!_seq) {
35948
0
        PyMem_Free(_children);
35949
0
        p->error_indicator = 1;
35950
0
        PyErr_NoMemory();
35951
0
        p->level--;
35952
0
        return NULL;
35953
0
    }
35954
2.21k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
35955
1.10k
    PyMem_Free(_children);
35956
1.10k
    p->level--;
35957
1.10k
    return _seq;
35958
1.10k
}
35959
35960
// _gather_141: (expressions ['as' star_target]) _loop0_140
35961
static asdl_seq *
35962
_gather_141_rule(Parser *p)
35963
1.50k
{
35964
1.50k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
35965
0
        _Pypegen_stack_overflow(p);
35966
0
    }
35967
1.50k
    if (p->error_indicator) {
35968
0
        p->level--;
35969
0
        return NULL;
35970
0
    }
35971
1.50k
    asdl_seq * _res = NULL;
35972
1.50k
    int _mark = p->mark;
35973
1.50k
    { // (expressions ['as' star_target]) _loop0_140
35974
1.50k
        if (p->error_indicator) {
35975
0
            p->level--;
35976
0
            return NULL;
35977
0
        }
35978
1.50k
        D(fprintf(stderr, "%*c> _gather_141[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_140"));
35979
1.50k
        void *elem;
35980
1.50k
        asdl_seq * seq;
35981
1.50k
        if (
35982
1.50k
            (elem = _tmp_173_rule(p))  // expressions ['as' star_target]
35983
1.50k
            &&
35984
1.50k
            (seq = _loop0_140_rule(p))  // _loop0_140
35985
1.50k
        )
35986
1.10k
        {
35987
1.10k
            D(fprintf(stderr, "%*c+ _gather_141[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_140"));
35988
1.10k
            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
35989
1.10k
            goto done;
35990
1.10k
        }
35991
393
        p->mark = _mark;
35992
393
        D(fprintf(stderr, "%*c%s _gather_141[%d-%d]: %s failed!\n", p->level, ' ',
35993
393
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_140"));
35994
393
    }
35995
0
    _res = NULL;
35996
1.50k
  done:
35997
1.50k
    p->level--;
35998
1.50k
    return _res;
35999
393
}
36000
36001
// _tmp_142: 'except' | 'finally'
36002
static void *
36003
_tmp_142_rule(Parser *p)
36004
1.70k
{
36005
1.70k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36006
0
        _Pypegen_stack_overflow(p);
36007
0
    }
36008
1.70k
    if (p->error_indicator) {
36009
0
        p->level--;
36010
0
        return NULL;
36011
0
    }
36012
1.70k
    void * _res = NULL;
36013
1.70k
    int _mark = p->mark;
36014
1.70k
    { // 'except'
36015
1.70k
        if (p->error_indicator) {
36016
0
            p->level--;
36017
0
            return NULL;
36018
0
        }
36019
1.70k
        D(fprintf(stderr, "%*c> _tmp_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'"));
36020
1.70k
        Token * _keyword;
36021
1.70k
        if (
36022
1.70k
            (_keyword = _PyPegen_expect_token(p, 682))  // token='except'
36023
1.70k
        )
36024
1.36k
        {
36025
1.36k
            D(fprintf(stderr, "%*c+ _tmp_142[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except'"));
36026
1.36k
            _res = _keyword;
36027
1.36k
            goto done;
36028
1.36k
        }
36029
336
        p->mark = _mark;
36030
336
        D(fprintf(stderr, "%*c%s _tmp_142[%d-%d]: %s failed!\n", p->level, ' ',
36031
336
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except'"));
36032
336
    }
36033
0
    { // 'finally'
36034
336
        if (p->error_indicator) {
36035
1
            p->level--;
36036
1
            return NULL;
36037
1
        }
36038
335
        D(fprintf(stderr, "%*c> _tmp_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'"));
36039
335
        Token * _keyword;
36040
335
        if (
36041
335
            (_keyword = _PyPegen_expect_token(p, 678))  // token='finally'
36042
335
        )
36043
303
        {
36044
303
            D(fprintf(stderr, "%*c+ _tmp_142[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally'"));
36045
303
            _res = _keyword;
36046
303
            goto done;
36047
303
        }
36048
32
        p->mark = _mark;
36049
32
        D(fprintf(stderr, "%*c%s _tmp_142[%d-%d]: %s failed!\n", p->level, ' ',
36050
32
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally'"));
36051
32
    }
36052
0
    _res = NULL;
36053
1.70k
  done:
36054
1.70k
    p->level--;
36055
1.70k
    return _res;
36056
32
}
36057
36058
// _loop0_143: block
36059
static asdl_seq *
36060
_loop0_143_rule(Parser *p)
36061
3.44k
{
36062
3.44k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36063
0
        _Pypegen_stack_overflow(p);
36064
0
    }
36065
3.44k
    if (p->error_indicator) {
36066
0
        p->level--;
36067
0
        return NULL;
36068
0
    }
36069
3.44k
    void *_res = NULL;
36070
3.44k
    int _mark = p->mark;
36071
3.44k
    void **_children = PyMem_Malloc(sizeof(void *));
36072
3.44k
    if (!_children) {
36073
0
        p->error_indicator = 1;
36074
0
        PyErr_NoMemory();
36075
0
        p->level--;
36076
0
        return NULL;
36077
0
    }
36078
3.44k
    Py_ssize_t _children_capacity = 1;
36079
3.44k
    Py_ssize_t _n = 0;
36080
3.44k
    { // block
36081
3.44k
        if (p->error_indicator) {
36082
0
            p->level--;
36083
0
            return NULL;
36084
0
        }
36085
3.44k
        D(fprintf(stderr, "%*c> _loop0_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block"));
36086
3.44k
        asdl_stmt_seq* block_var;
36087
3.44k
        while (
36088
6.77k
            (block_var = block_rule(p))  // block
36089
3.44k
        )
36090
3.32k
        {
36091
3.32k
            _res = block_var;
36092
3.32k
            if (_n == _children_capacity) {
36093
0
                _children_capacity *= 2;
36094
0
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
36095
0
                if (!_new_children) {
36096
0
                    PyMem_Free(_children);
36097
0
                    p->error_indicator = 1;
36098
0
                    PyErr_NoMemory();
36099
0
                    p->level--;
36100
0
                    return NULL;
36101
0
                }
36102
0
                _children = _new_children;
36103
0
            }
36104
3.32k
            _children[_n++] = _res;
36105
3.32k
            _mark = p->mark;
36106
3.32k
        }
36107
3.44k
        p->mark = _mark;
36108
3.44k
        D(fprintf(stderr, "%*c%s _loop0_143[%d-%d]: %s failed!\n", p->level, ' ',
36109
3.44k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "block"));
36110
3.44k
    }
36111
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
36112
3.44k
    if (!_seq) {
36113
0
        PyMem_Free(_children);
36114
0
        p->error_indicator = 1;
36115
0
        PyErr_NoMemory();
36116
0
        p->level--;
36117
0
        return NULL;
36118
0
    }
36119
6.77k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
36120
3.44k
    PyMem_Free(_children);
36121
3.44k
    p->level--;
36122
3.44k
    return _seq;
36123
3.44k
}
36124
36125
// _tmp_144: expression ['as' NAME]
36126
static void *
36127
_tmp_144_rule(Parser *p)
36128
13
{
36129
13
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36130
0
        _Pypegen_stack_overflow(p);
36131
0
    }
36132
13
    if (p->error_indicator) {
36133
0
        p->level--;
36134
0
        return NULL;
36135
0
    }
36136
13
    void * _res = NULL;
36137
13
    int _mark = p->mark;
36138
13
    { // expression ['as' NAME]
36139
13
        if (p->error_indicator) {
36140
0
            p->level--;
36141
0
            return NULL;
36142
0
        }
36143
13
        D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]"));
36144
13
        void *_opt_var;
36145
13
        UNUSED(_opt_var); // Silence compiler warnings
36146
13
        expr_ty expression_var;
36147
13
        if (
36148
13
            (expression_var = expression_rule(p))  // expression
36149
13
            &&
36150
13
            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
36151
13
        )
36152
1
        {
36153
1
            D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]"));
36154
1
            _res = _PyPegen_dummy_name(p, expression_var, _opt_var);
36155
1
            goto done;
36156
1
        }
36157
12
        p->mark = _mark;
36158
12
        D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ',
36159
12
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' NAME]"));
36160
12
    }
36161
0
    _res = NULL;
36162
13
  done:
36163
13
    p->level--;
36164
13
    return _res;
36165
12
}
36166
36167
// _tmp_145: NEWLINE | ':'
36168
static void *
36169
_tmp_145_rule(Parser *p)
36170
73
{
36171
73
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36172
0
        _Pypegen_stack_overflow(p);
36173
0
    }
36174
73
    if (p->error_indicator) {
36175
0
        p->level--;
36176
0
        return NULL;
36177
0
    }
36178
73
    void * _res = NULL;
36179
73
    int _mark = p->mark;
36180
73
    { // NEWLINE
36181
73
        if (p->error_indicator) {
36182
0
            p->level--;
36183
0
            return NULL;
36184
0
        }
36185
73
        D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
36186
73
        Token * newline_var;
36187
73
        if (
36188
73
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
36189
73
        )
36190
5
        {
36191
5
            D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
36192
5
            _res = newline_var;
36193
5
            goto done;
36194
5
        }
36195
68
        p->mark = _mark;
36196
68
        D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ',
36197
68
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
36198
68
    }
36199
0
    { // ':'
36200
68
        if (p->error_indicator) {
36201
0
            p->level--;
36202
0
            return NULL;
36203
0
        }
36204
68
        D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
36205
68
        Token * _literal;
36206
68
        if (
36207
68
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
36208
68
        )
36209
1
        {
36210
1
            D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
36211
1
            _res = _literal;
36212
1
            goto done;
36213
1
        }
36214
67
        p->mark = _mark;
36215
67
        D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ',
36216
67
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
36217
67
    }
36218
0
    _res = NULL;
36219
73
  done:
36220
73
    p->level--;
36221
73
    return _res;
36222
67
}
36223
36224
// _tmp_146: positional_patterns ','
36225
static void *
36226
_tmp_146_rule(Parser *p)
36227
2.80k
{
36228
2.80k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36229
0
        _Pypegen_stack_overflow(p);
36230
0
    }
36231
2.80k
    if (p->error_indicator) {
36232
0
        p->level--;
36233
0
        return NULL;
36234
0
    }
36235
2.80k
    void * _res = NULL;
36236
2.80k
    int _mark = p->mark;
36237
2.80k
    { // positional_patterns ','
36238
2.80k
        if (p->error_indicator) {
36239
0
            p->level--;
36240
0
            return NULL;
36241
0
        }
36242
2.80k
        D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "positional_patterns ','"));
36243
2.80k
        Token * _literal;
36244
2.80k
        asdl_pattern_seq* positional_patterns_var;
36245
2.80k
        if (
36246
2.80k
            (positional_patterns_var = positional_patterns_rule(p))  // positional_patterns
36247
2.80k
            &&
36248
2.80k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
36249
2.80k
        )
36250
792
        {
36251
792
            D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "positional_patterns ','"));
36252
792
            _res = _PyPegen_dummy_name(p, positional_patterns_var, _literal);
36253
792
            goto done;
36254
792
        }
36255
2.01k
        p->mark = _mark;
36256
2.01k
        D(fprintf(stderr, "%*c%s _tmp_146[%d-%d]: %s failed!\n", p->level, ' ',
36257
2.01k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "positional_patterns ','"));
36258
2.01k
    }
36259
0
    _res = NULL;
36260
2.80k
  done:
36261
2.80k
    p->level--;
36262
2.80k
    return _res;
36263
2.01k
}
36264
36265
// _tmp_147: '}' | ','
36266
static void *
36267
_tmp_147_rule(Parser *p)
36268
3.23k
{
36269
3.23k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36270
0
        _Pypegen_stack_overflow(p);
36271
0
    }
36272
3.23k
    if (p->error_indicator) {
36273
0
        p->level--;
36274
0
        return NULL;
36275
0
    }
36276
3.23k
    void * _res = NULL;
36277
3.23k
    int _mark = p->mark;
36278
3.23k
    { // '}'
36279
3.23k
        if (p->error_indicator) {
36280
0
            p->level--;
36281
0
            return NULL;
36282
0
        }
36283
3.23k
        D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'"));
36284
3.23k
        Token * _literal;
36285
3.23k
        if (
36286
3.23k
            (_literal = _PyPegen_expect_token(p, 26))  // token='}'
36287
3.23k
        )
36288
6
        {
36289
6
            D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'"));
36290
6
            _res = _literal;
36291
6
            goto done;
36292
6
        }
36293
3.22k
        p->mark = _mark;
36294
3.22k
        D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ',
36295
3.22k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'"));
36296
3.22k
    }
36297
0
    { // ','
36298
3.22k
        if (p->error_indicator) {
36299
0
            p->level--;
36300
0
            return NULL;
36301
0
        }
36302
3.22k
        D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
36303
3.22k
        Token * _literal;
36304
3.22k
        if (
36305
3.22k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
36306
3.22k
        )
36307
2
        {
36308
2
            D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
36309
2
            _res = _literal;
36310
2
            goto done;
36311
2
        }
36312
3.22k
        p->mark = _mark;
36313
3.22k
        D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ',
36314
3.22k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
36315
3.22k
    }
36316
0
    _res = NULL;
36317
3.23k
  done:
36318
3.23k
    p->level--;
36319
3.23k
    return _res;
36320
3.22k
}
36321
36322
// _tmp_148: '=' | '!' | ':' | '}'
36323
static void *
36324
_tmp_148_rule(Parser *p)
36325
240
{
36326
240
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36327
0
        _Pypegen_stack_overflow(p);
36328
0
    }
36329
240
    if (p->error_indicator) {
36330
0
        p->level--;
36331
0
        return NULL;
36332
0
    }
36333
240
    void * _res = NULL;
36334
240
    int _mark = p->mark;
36335
240
    { // '='
36336
240
        if (p->error_indicator) {
36337
0
            p->level--;
36338
0
            return NULL;
36339
0
        }
36340
240
        D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
36341
240
        Token * _literal;
36342
240
        if (
36343
240
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
36344
240
        )
36345
21
        {
36346
21
            D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='"));
36347
21
            _res = _literal;
36348
21
            goto done;
36349
21
        }
36350
219
        p->mark = _mark;
36351
219
        D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ',
36352
219
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='"));
36353
219
    }
36354
0
    { // '!'
36355
219
        if (p->error_indicator) {
36356
0
            p->level--;
36357
0
            return NULL;
36358
0
        }
36359
219
        D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'"));
36360
219
        Token * _literal;
36361
219
        if (
36362
219
            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
36363
219
        )
36364
15
        {
36365
15
            D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'"));
36366
15
            _res = _literal;
36367
15
            goto done;
36368
15
        }
36369
204
        p->mark = _mark;
36370
204
        D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ',
36371
204
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'"));
36372
204
    }
36373
0
    { // ':'
36374
204
        if (p->error_indicator) {
36375
0
            p->level--;
36376
0
            return NULL;
36377
0
        }
36378
204
        D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
36379
204
        Token * _literal;
36380
204
        if (
36381
204
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
36382
204
        )
36383
156
        {
36384
156
            D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
36385
156
            _res = _literal;
36386
156
            goto done;
36387
156
        }
36388
48
        p->mark = _mark;
36389
48
        D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ',
36390
48
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
36391
48
    }
36392
0
    { // '}'
36393
48
        if (p->error_indicator) {
36394
0
            p->level--;
36395
0
            return NULL;
36396
0
        }
36397
48
        D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'"));
36398
48
        Token * _literal;
36399
48
        if (
36400
48
            (_literal = _PyPegen_expect_token(p, 26))  // token='}'
36401
48
        )
36402
0
        {
36403
0
            D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'"));
36404
0
            _res = _literal;
36405
0
            goto done;
36406
0
        }
36407
48
        p->mark = _mark;
36408
48
        D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ',
36409
48
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'"));
36410
48
    }
36411
0
    _res = NULL;
36412
240
  done:
36413
240
    p->level--;
36414
240
    return _res;
36415
48
}
36416
36417
// _tmp_149: '!' | ':' | '}'
36418
static void *
36419
_tmp_149_rule(Parser *p)
36420
21
{
36421
21
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36422
0
        _Pypegen_stack_overflow(p);
36423
0
    }
36424
21
    if (p->error_indicator) {
36425
0
        p->level--;
36426
0
        return NULL;
36427
0
    }
36428
21
    void * _res = NULL;
36429
21
    int _mark = p->mark;
36430
21
    { // '!'
36431
21
        if (p->error_indicator) {
36432
0
            p->level--;
36433
0
            return NULL;
36434
0
        }
36435
21
        D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'"));
36436
21
        Token * _literal;
36437
21
        if (
36438
21
            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
36439
21
        )
36440
7
        {
36441
7
            D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'"));
36442
7
            _res = _literal;
36443
7
            goto done;
36444
7
        }
36445
14
        p->mark = _mark;
36446
14
        D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ',
36447
14
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'"));
36448
14
    }
36449
0
    { // ':'
36450
14
        if (p->error_indicator) {
36451
0
            p->level--;
36452
0
            return NULL;
36453
0
        }
36454
14
        D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
36455
14
        Token * _literal;
36456
14
        if (
36457
14
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
36458
14
        )
36459
3
        {
36460
3
            D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
36461
3
            _res = _literal;
36462
3
            goto done;
36463
3
        }
36464
11
        p->mark = _mark;
36465
11
        D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ',
36466
11
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
36467
11
    }
36468
0
    { // '}'
36469
11
        if (p->error_indicator) {
36470
0
            p->level--;
36471
0
            return NULL;
36472
0
        }
36473
11
        D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'"));
36474
11
        Token * _literal;
36475
11
        if (
36476
11
            (_literal = _PyPegen_expect_token(p, 26))  // token='}'
36477
11
        )
36478
0
        {
36479
0
            D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'"));
36480
0
            _res = _literal;
36481
0
            goto done;
36482
0
        }
36483
11
        p->mark = _mark;
36484
11
        D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ',
36485
11
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'"));
36486
11
    }
36487
0
    _res = NULL;
36488
21
  done:
36489
21
    p->level--;
36490
21
    return _res;
36491
11
}
36492
36493
// _tmp_150: '!' NAME
36494
static void *
36495
_tmp_150_rule(Parser *p)
36496
327
{
36497
327
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36498
0
        _Pypegen_stack_overflow(p);
36499
0
    }
36500
327
    if (p->error_indicator) {
36501
0
        p->level--;
36502
0
        return NULL;
36503
0
    }
36504
327
    void * _res = NULL;
36505
327
    int _mark = p->mark;
36506
327
    { // '!' NAME
36507
327
        if (p->error_indicator) {
36508
0
            p->level--;
36509
0
            return NULL;
36510
0
        }
36511
327
        D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME"));
36512
327
        Token * _literal;
36513
327
        expr_ty name_var;
36514
327
        if (
36515
327
            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
36516
327
            &&
36517
327
            (name_var = _PyPegen_name_token(p))  // NAME
36518
327
        )
36519
9
        {
36520
9
            D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME"));
36521
9
            _res = _PyPegen_dummy_name(p, _literal, name_var);
36522
9
            goto done;
36523
9
        }
36524
318
        p->mark = _mark;
36525
318
        D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ',
36526
318
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' NAME"));
36527
318
    }
36528
0
    _res = NULL;
36529
327
  done:
36530
327
    p->level--;
36531
327
    return _res;
36532
318
}
36533
36534
// _tmp_151: ':' | '}'
36535
static void *
36536
_tmp_151_rule(Parser *p)
36537
189
{
36538
189
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36539
0
        _Pypegen_stack_overflow(p);
36540
0
    }
36541
189
    if (p->error_indicator) {
36542
0
        p->level--;
36543
0
        return NULL;
36544
0
    }
36545
189
    void * _res = NULL;
36546
189
    int _mark = p->mark;
36547
189
    { // ':'
36548
189
        if (p->error_indicator) {
36549
0
            p->level--;
36550
0
            return NULL;
36551
0
        }
36552
189
        D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
36553
189
        Token * _literal;
36554
189
        if (
36555
189
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
36556
189
        )
36557
163
        {
36558
163
            D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
36559
163
            _res = _literal;
36560
163
            goto done;
36561
163
        }
36562
26
        p->mark = _mark;
36563
26
        D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ',
36564
26
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
36565
26
    }
36566
0
    { // '}'
36567
26
        if (p->error_indicator) {
36568
0
            p->level--;
36569
0
            return NULL;
36570
0
        }
36571
26
        D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'"));
36572
26
        Token * _literal;
36573
26
        if (
36574
26
            (_literal = _PyPegen_expect_token(p, 26))  // token='}'
36575
26
        )
36576
1
        {
36577
1
            D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'"));
36578
1
            _res = _literal;
36579
1
            goto done;
36580
1
        }
36581
25
        p->mark = _mark;
36582
25
        D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ',
36583
25
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'"));
36584
25
    }
36585
0
    _res = NULL;
36586
189
  done:
36587
189
    p->level--;
36588
189
    return _res;
36589
25
}
36590
36591
// _tmp_152: '+' | '-' | '*' | '/' | '%' | '//' | '@'
36592
static void *
36593
_tmp_152_rule(Parser *p)
36594
188k
{
36595
188k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36596
0
        _Pypegen_stack_overflow(p);
36597
0
    }
36598
188k
    if (p->error_indicator) {
36599
0
        p->level--;
36600
0
        return NULL;
36601
0
    }
36602
188k
    void * _res = NULL;
36603
188k
    int _mark = p->mark;
36604
188k
    { // '+'
36605
188k
        if (p->error_indicator) {
36606
0
            p->level--;
36607
0
            return NULL;
36608
0
        }
36609
188k
        D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'"));
36610
188k
        Token * _literal;
36611
188k
        if (
36612
188k
            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
36613
188k
        )
36614
1.18k
        {
36615
1.18k
            D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'"));
36616
1.18k
            _res = _literal;
36617
1.18k
            goto done;
36618
1.18k
        }
36619
187k
        p->mark = _mark;
36620
187k
        D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ',
36621
187k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'"));
36622
187k
    }
36623
0
    { // '-'
36624
187k
        if (p->error_indicator) {
36625
0
            p->level--;
36626
0
            return NULL;
36627
0
        }
36628
187k
        D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'"));
36629
187k
        Token * _literal;
36630
187k
        if (
36631
187k
            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
36632
187k
        )
36633
548
        {
36634
548
            D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'"));
36635
548
            _res = _literal;
36636
548
            goto done;
36637
548
        }
36638
187k
        p->mark = _mark;
36639
187k
        D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ',
36640
187k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'"));
36641
187k
    }
36642
0
    { // '*'
36643
187k
        if (p->error_indicator) {
36644
0
            p->level--;
36645
0
            return NULL;
36646
0
        }
36647
187k
        D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
36648
187k
        Token * _literal;
36649
187k
        if (
36650
187k
            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
36651
187k
        )
36652
524
        {
36653
524
            D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
36654
524
            _res = _literal;
36655
524
            goto done;
36656
524
        }
36657
186k
        p->mark = _mark;
36658
186k
        D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ',
36659
186k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'"));
36660
186k
    }
36661
0
    { // '/'
36662
186k
        if (p->error_indicator) {
36663
0
            p->level--;
36664
0
            return NULL;
36665
0
        }
36666
186k
        D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'"));
36667
186k
        Token * _literal;
36668
186k
        if (
36669
186k
            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
36670
186k
        )
36671
328
        {
36672
328
            D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'"));
36673
328
            _res = _literal;
36674
328
            goto done;
36675
328
        }
36676
186k
        p->mark = _mark;
36677
186k
        D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ',
36678
186k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'"));
36679
186k
    }
36680
0
    { // '%'
36681
186k
        if (p->error_indicator) {
36682
0
            p->level--;
36683
0
            return NULL;
36684
0
        }
36685
186k
        D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'%'"));
36686
186k
        Token * _literal;
36687
186k
        if (
36688
186k
            (_literal = _PyPegen_expect_token(p, 24))  // token='%'
36689
186k
        )
36690
307
        {
36691
307
            D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'%'"));
36692
307
            _res = _literal;
36693
307
            goto done;
36694
307
        }
36695
185k
        p->mark = _mark;
36696
185k
        D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ',
36697
185k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'%'"));
36698
185k
    }
36699
0
    { // '//'
36700
185k
        if (p->error_indicator) {
36701
0
            p->level--;
36702
0
            return NULL;
36703
0
        }
36704
185k
        D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'//'"));
36705
185k
        Token * _literal;
36706
185k
        if (
36707
185k
            (_literal = _PyPegen_expect_token(p, 47))  // token='//'
36708
185k
        )
36709
202
        {
36710
202
            D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'//'"));
36711
202
            _res = _literal;
36712
202
            goto done;
36713
202
        }
36714
185k
        p->mark = _mark;
36715
185k
        D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ',
36716
185k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'//'"));
36717
185k
    }
36718
0
    { // '@'
36719
185k
        if (p->error_indicator) {
36720
0
            p->level--;
36721
0
            return NULL;
36722
0
        }
36723
185k
        D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
36724
185k
        Token * _literal;
36725
185k
        if (
36726
185k
            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
36727
185k
        )
36728
320
        {
36729
320
            D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'"));
36730
320
            _res = _literal;
36731
320
            goto done;
36732
320
        }
36733
185k
        p->mark = _mark;
36734
185k
        D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ',
36735
185k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'"));
36736
185k
    }
36737
0
    _res = NULL;
36738
188k
  done:
36739
188k
    p->level--;
36740
188k
    return _res;
36741
185k
}
36742
36743
// _tmp_153: '+' | '-' | '~'
36744
static void *
36745
_tmp_153_rule(Parser *p)
36746
277k
{
36747
277k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36748
1
        _Pypegen_stack_overflow(p);
36749
1
    }
36750
277k
    if (p->error_indicator) {
36751
1
        p->level--;
36752
1
        return NULL;
36753
1
    }
36754
277k
    void * _res = NULL;
36755
277k
    int _mark = p->mark;
36756
277k
    { // '+'
36757
277k
        if (p->error_indicator) {
36758
0
            p->level--;
36759
0
            return NULL;
36760
0
        }
36761
277k
        D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'"));
36762
277k
        Token * _literal;
36763
277k
        if (
36764
277k
            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
36765
277k
        )
36766
3.70k
        {
36767
3.70k
            D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'"));
36768
3.70k
            _res = _literal;
36769
3.70k
            goto done;
36770
3.70k
        }
36771
274k
        p->mark = _mark;
36772
274k
        D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ',
36773
274k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'"));
36774
274k
    }
36775
0
    { // '-'
36776
274k
        if (p->error_indicator) {
36777
0
            p->level--;
36778
0
            return NULL;
36779
0
        }
36780
274k
        D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'"));
36781
274k
        Token * _literal;
36782
274k
        if (
36783
274k
            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
36784
274k
        )
36785
4.24k
        {
36786
4.24k
            D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'"));
36787
4.24k
            _res = _literal;
36788
4.24k
            goto done;
36789
4.24k
        }
36790
269k
        p->mark = _mark;
36791
269k
        D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ',
36792
269k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'"));
36793
269k
    }
36794
0
    { // '~'
36795
269k
        if (p->error_indicator) {
36796
0
            p->level--;
36797
0
            return NULL;
36798
0
        }
36799
269k
        D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~'"));
36800
269k
        Token * _literal;
36801
269k
        if (
36802
269k
            (_literal = _PyPegen_expect_token(p, 31))  // token='~'
36803
269k
        )
36804
1.04k
        {
36805
1.04k
            D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~'"));
36806
1.04k
            _res = _literal;
36807
1.04k
            goto done;
36808
1.04k
        }
36809
268k
        p->mark = _mark;
36810
268k
        D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ',
36811
268k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'~'"));
36812
268k
    }
36813
0
    _res = NULL;
36814
277k
  done:
36815
277k
    p->level--;
36816
277k
    return _res;
36817
268k
}
36818
36819
// _tmp_154: star_targets '='
36820
static void *
36821
_tmp_154_rule(Parser *p)
36822
251k
{
36823
251k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36824
0
        _Pypegen_stack_overflow(p);
36825
0
    }
36826
251k
    if (p->error_indicator) {
36827
0
        p->level--;
36828
0
        return NULL;
36829
0
    }
36830
251k
    void * _res = NULL;
36831
251k
    int _mark = p->mark;
36832
251k
    { // star_targets '='
36833
251k
        if (p->error_indicator) {
36834
0
            p->level--;
36835
0
            return NULL;
36836
0
        }
36837
251k
        D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
36838
251k
        Token * _literal;
36839
251k
        expr_ty z;
36840
251k
        if (
36841
251k
            (z = star_targets_rule(p))  // star_targets
36842
251k
            &&
36843
251k
            (_literal = _PyPegen_expect_token(p, 22))  // token='='
36844
251k
        )
36845
15.4k
        {
36846
15.4k
            D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
36847
15.4k
            _res = z;
36848
15.4k
            if (_res == NULL && PyErr_Occurred()) {
36849
0
                p->error_indicator = 1;
36850
0
                p->level--;
36851
0
                return NULL;
36852
0
            }
36853
15.4k
            goto done;
36854
15.4k
        }
36855
236k
        p->mark = _mark;
36856
236k
        D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ',
36857
236k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='"));
36858
236k
    }
36859
0
    _res = NULL;
36860
251k
  done:
36861
251k
    p->level--;
36862
251k
    return _res;
36863
236k
}
36864
36865
// _tmp_155: '.' | '...'
36866
static void *
36867
_tmp_155_rule(Parser *p)
36868
12.3k
{
36869
12.3k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36870
0
        _Pypegen_stack_overflow(p);
36871
0
    }
36872
12.3k
    if (p->error_indicator) {
36873
0
        p->level--;
36874
0
        return NULL;
36875
0
    }
36876
12.3k
    void * _res = NULL;
36877
12.3k
    int _mark = p->mark;
36878
12.3k
    { // '.'
36879
12.3k
        if (p->error_indicator) {
36880
0
            p->level--;
36881
0
            return NULL;
36882
0
        }
36883
12.3k
        D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
36884
12.3k
        Token * _literal;
36885
12.3k
        if (
36886
12.3k
            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
36887
12.3k
        )
36888
3.89k
        {
36889
3.89k
            D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'"));
36890
3.89k
            _res = _literal;
36891
3.89k
            goto done;
36892
3.89k
        }
36893
8.45k
        p->mark = _mark;
36894
8.45k
        D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ',
36895
8.45k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'"));
36896
8.45k
    }
36897
0
    { // '...'
36898
8.45k
        if (p->error_indicator) {
36899
8
            p->level--;
36900
8
            return NULL;
36901
8
        }
36902
8.44k
        D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
36903
8.44k
        Token * _literal;
36904
8.44k
        if (
36905
8.44k
            (_literal = _PyPegen_expect_token(p, 52))  // token='...'
36906
8.44k
        )
36907
4.53k
        {
36908
4.53k
            D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'"));
36909
4.53k
            _res = _literal;
36910
4.53k
            goto done;
36911
4.53k
        }
36912
3.90k
        p->mark = _mark;
36913
3.90k
        D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ',
36914
3.90k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'"));
36915
3.90k
    }
36916
0
    _res = NULL;
36917
12.3k
  done:
36918
12.3k
    p->level--;
36919
12.3k
    return _res;
36920
3.90k
}
36921
36922
// _tmp_156: '@' named_expression NEWLINE
36923
static void *
36924
_tmp_156_rule(Parser *p)
36925
21.1k
{
36926
21.1k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36927
0
        _Pypegen_stack_overflow(p);
36928
0
    }
36929
21.1k
    if (p->error_indicator) {
36930
0
        p->level--;
36931
0
        return NULL;
36932
0
    }
36933
21.1k
    void * _res = NULL;
36934
21.1k
    int _mark = p->mark;
36935
21.1k
    { // '@' named_expression NEWLINE
36936
21.1k
        if (p->error_indicator) {
36937
0
            p->level--;
36938
0
            return NULL;
36939
0
        }
36940
21.1k
        D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE"));
36941
21.1k
        Token * _literal;
36942
21.1k
        expr_ty f;
36943
21.1k
        Token * newline_var;
36944
21.1k
        if (
36945
21.1k
            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
36946
21.1k
            &&
36947
21.1k
            (f = named_expression_rule(p))  // named_expression
36948
21.1k
            &&
36949
21.1k
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
36950
21.1k
        )
36951
4.56k
        {
36952
4.56k
            D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE"));
36953
4.56k
            _res = f;
36954
4.56k
            if (_res == NULL && PyErr_Occurred()) {
36955
0
                p->error_indicator = 1;
36956
0
                p->level--;
36957
0
                return NULL;
36958
0
            }
36959
4.56k
            goto done;
36960
4.56k
        }
36961
16.5k
        p->mark = _mark;
36962
16.5k
        D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ',
36963
16.5k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE"));
36964
16.5k
    }
36965
0
    _res = NULL;
36966
21.1k
  done:
36967
21.1k
    p->level--;
36968
21.1k
    return _res;
36969
16.5k
}
36970
36971
// _tmp_157: ',' star_expression
36972
static void *
36973
_tmp_157_rule(Parser *p)
36974
208k
{
36975
208k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
36976
0
        _Pypegen_stack_overflow(p);
36977
0
    }
36978
208k
    if (p->error_indicator) {
36979
0
        p->level--;
36980
0
        return NULL;
36981
0
    }
36982
208k
    void * _res = NULL;
36983
208k
    int _mark = p->mark;
36984
208k
    { // ',' star_expression
36985
208k
        if (p->error_indicator) {
36986
0
            p->level--;
36987
0
            return NULL;
36988
0
        }
36989
208k
        D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression"));
36990
208k
        Token * _literal;
36991
208k
        expr_ty c;
36992
208k
        if (
36993
208k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
36994
208k
            &&
36995
208k
            (c = star_expression_rule(p))  // star_expression
36996
208k
        )
36997
13.6k
        {
36998
13.6k
            D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression"));
36999
13.6k
            _res = c;
37000
13.6k
            if (_res == NULL && PyErr_Occurred()) {
37001
0
                p->error_indicator = 1;
37002
0
                p->level--;
37003
0
                return NULL;
37004
0
            }
37005
13.6k
            goto done;
37006
13.6k
        }
37007
194k
        p->mark = _mark;
37008
194k
        D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ',
37009
194k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression"));
37010
194k
    }
37011
0
    _res = NULL;
37012
208k
  done:
37013
208k
    p->level--;
37014
208k
    return _res;
37015
194k
}
37016
37017
// _tmp_158: 'or' conjunction
37018
static void *
37019
_tmp_158_rule(Parser *p)
37020
353k
{
37021
353k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37022
0
        _Pypegen_stack_overflow(p);
37023
0
    }
37024
353k
    if (p->error_indicator) {
37025
0
        p->level--;
37026
0
        return NULL;
37027
0
    }
37028
353k
    void * _res = NULL;
37029
353k
    int _mark = p->mark;
37030
353k
    { // 'or' conjunction
37031
353k
        if (p->error_indicator) {
37032
0
            p->level--;
37033
0
            return NULL;
37034
0
        }
37035
353k
        D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction"));
37036
353k
        Token * _keyword;
37037
353k
        expr_ty c;
37038
353k
        if (
37039
353k
            (_keyword = _PyPegen_expect_token(p, 589))  // token='or'
37040
353k
            &&
37041
353k
            (c = conjunction_rule(p))  // conjunction
37042
353k
        )
37043
3.92k
        {
37044
3.92k
            D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction"));
37045
3.92k
            _res = c;
37046
3.92k
            if (_res == NULL && PyErr_Occurred()) {
37047
0
                p->error_indicator = 1;
37048
0
                p->level--;
37049
0
                return NULL;
37050
0
            }
37051
3.92k
            goto done;
37052
3.92k
        }
37053
349k
        p->mark = _mark;
37054
349k
        D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ',
37055
349k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction"));
37056
349k
    }
37057
0
    _res = NULL;
37058
353k
  done:
37059
353k
    p->level--;
37060
353k
    return _res;
37061
349k
}
37062
37063
// _tmp_159: 'and' inversion
37064
static void *
37065
_tmp_159_rule(Parser *p)
37066
356k
{
37067
356k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37068
0
        _Pypegen_stack_overflow(p);
37069
0
    }
37070
356k
    if (p->error_indicator) {
37071
0
        p->level--;
37072
0
        return NULL;
37073
0
    }
37074
356k
    void * _res = NULL;
37075
356k
    int _mark = p->mark;
37076
356k
    { // 'and' inversion
37077
356k
        if (p->error_indicator) {
37078
0
            p->level--;
37079
0
            return NULL;
37080
0
        }
37081
356k
        D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion"));
37082
356k
        Token * _keyword;
37083
356k
        expr_ty c;
37084
356k
        if (
37085
356k
            (_keyword = _PyPegen_expect_token(p, 590))  // token='and'
37086
356k
            &&
37087
356k
            (c = inversion_rule(p))  // inversion
37088
356k
        )
37089
2.91k
        {
37090
2.91k
            D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion"));
37091
2.91k
            _res = c;
37092
2.91k
            if (_res == NULL && PyErr_Occurred()) {
37093
0
                p->error_indicator = 1;
37094
0
                p->level--;
37095
0
                return NULL;
37096
0
            }
37097
2.91k
            goto done;
37098
2.91k
        }
37099
353k
        p->mark = _mark;
37100
353k
        D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ',
37101
353k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion"));
37102
353k
    }
37103
0
    _res = NULL;
37104
356k
  done:
37105
356k
    p->level--;
37106
356k
    return _res;
37107
353k
}
37108
37109
// _tmp_160: slice | starred_expression
37110
static void *
37111
_tmp_160_rule(Parser *p)
37112
32.0k
{
37113
32.0k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37114
0
        _Pypegen_stack_overflow(p);
37115
0
    }
37116
32.0k
    if (p->error_indicator) {
37117
0
        p->level--;
37118
0
        return NULL;
37119
0
    }
37120
32.0k
    void * _res = NULL;
37121
32.0k
    int _mark = p->mark;
37122
32.0k
    { // slice
37123
32.0k
        if (p->error_indicator) {
37124
0
            p->level--;
37125
0
            return NULL;
37126
0
        }
37127
32.0k
        D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice"));
37128
32.0k
        expr_ty slice_var;
37129
32.0k
        if (
37130
32.0k
            (slice_var = slice_rule(p))  // slice
37131
32.0k
        )
37132
28.6k
        {
37133
28.6k
            D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice"));
37134
28.6k
            _res = slice_var;
37135
28.6k
            goto done;
37136
28.6k
        }
37137
3.43k
        p->mark = _mark;
37138
3.43k
        D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ',
37139
3.43k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice"));
37140
3.43k
    }
37141
0
    { // starred_expression
37142
3.43k
        if (p->error_indicator) {
37143
99
            p->level--;
37144
99
            return NULL;
37145
99
        }
37146
3.33k
        D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
37147
3.33k
        expr_ty starred_expression_var;
37148
3.33k
        if (
37149
3.33k
            (starred_expression_var = starred_expression_rule(p))  // starred_expression
37150
3.33k
        )
37151
406
        {
37152
406
            D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression"));
37153
406
            _res = starred_expression_var;
37154
406
            goto done;
37155
406
        }
37156
2.93k
        p->mark = _mark;
37157
2.93k
        D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ',
37158
2.93k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression"));
37159
2.93k
    }
37160
0
    _res = NULL;
37161
31.9k
  done:
37162
31.9k
    p->level--;
37163
31.9k
    return _res;
37164
2.93k
}
37165
37166
// _tmp_161: fstring | string | tstring
37167
static void *
37168
_tmp_161_rule(Parser *p)
37169
176k
{
37170
176k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37171
1
        _Pypegen_stack_overflow(p);
37172
1
    }
37173
176k
    if (p->error_indicator) {
37174
5
        p->level--;
37175
5
        return NULL;
37176
5
    }
37177
176k
    void * _res = NULL;
37178
176k
    int _mark = p->mark;
37179
176k
    { // fstring
37180
176k
        if (p->error_indicator) {
37181
0
            p->level--;
37182
0
            return NULL;
37183
0
        }
37184
176k
        D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring"));
37185
176k
        expr_ty fstring_var;
37186
176k
        if (
37187
176k
            (fstring_var = fstring_rule(p))  // fstring
37188
176k
        )
37189
12.0k
        {
37190
12.0k
            D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring"));
37191
12.0k
            _res = fstring_var;
37192
12.0k
            goto done;
37193
12.0k
        }
37194
164k
        p->mark = _mark;
37195
164k
        D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ',
37196
164k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring"));
37197
164k
    }
37198
0
    { // string
37199
164k
        if (p->error_indicator) {
37200
1.99k
            p->level--;
37201
1.99k
            return NULL;
37202
1.99k
        }
37203
162k
        D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "string"));
37204
162k
        expr_ty string_var;
37205
162k
        if (
37206
162k
            (string_var = string_rule(p))  // string
37207
162k
        )
37208
62.9k
        {
37209
62.9k
            D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "string"));
37210
62.9k
            _res = string_var;
37211
62.9k
            goto done;
37212
62.9k
        }
37213
99.2k
        p->mark = _mark;
37214
99.2k
        D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ',
37215
99.2k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "string"));
37216
99.2k
    }
37217
0
    { // tstring
37218
99.2k
        if (p->error_indicator) {
37219
357
            p->level--;
37220
357
            return NULL;
37221
357
        }
37222
98.9k
        D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring"));
37223
98.9k
        expr_ty tstring_var;
37224
98.9k
        if (
37225
98.9k
            (tstring_var = tstring_rule(p))  // tstring
37226
98.9k
        )
37227
2.59k
        {
37228
2.59k
            D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tstring"));
37229
2.59k
            _res = tstring_var;
37230
2.59k
            goto done;
37231
2.59k
        }
37232
96.3k
        p->mark = _mark;
37233
96.3k
        D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ',
37234
96.3k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring"));
37235
96.3k
    }
37236
0
    _res = NULL;
37237
173k
  done:
37238
173k
    p->level--;
37239
173k
    return _res;
37240
96.3k
}
37241
37242
// _tmp_162: 'if' disjunction
37243
static void *
37244
_tmp_162_rule(Parser *p)
37245
14.8k
{
37246
14.8k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37247
0
        _Pypegen_stack_overflow(p);
37248
0
    }
37249
14.8k
    if (p->error_indicator) {
37250
0
        p->level--;
37251
0
        return NULL;
37252
0
    }
37253
14.8k
    void * _res = NULL;
37254
14.8k
    int _mark = p->mark;
37255
14.8k
    { // 'if' disjunction
37256
14.8k
        if (p->error_indicator) {
37257
0
            p->level--;
37258
0
            return NULL;
37259
0
        }
37260
14.8k
        D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
37261
14.8k
        Token * _keyword;
37262
14.8k
        expr_ty z;
37263
14.8k
        if (
37264
14.8k
            (_keyword = _PyPegen_expect_token(p, 687))  // token='if'
37265
14.8k
            &&
37266
14.8k
            (z = disjunction_rule(p))  // disjunction
37267
14.8k
        )
37268
5.12k
        {
37269
5.12k
            D(fprintf(stderr, "%*c+ _tmp_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
37270
5.12k
            _res = z;
37271
5.12k
            if (_res == NULL && PyErr_Occurred()) {
37272
0
                p->error_indicator = 1;
37273
0
                p->level--;
37274
0
                return NULL;
37275
0
            }
37276
5.12k
            goto done;
37277
5.12k
        }
37278
9.70k
        p->mark = _mark;
37279
9.70k
        D(fprintf(stderr, "%*c%s _tmp_162[%d-%d]: %s failed!\n", p->level, ' ',
37280
9.70k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction"));
37281
9.70k
    }
37282
0
    _res = NULL;
37283
14.8k
  done:
37284
14.8k
    p->level--;
37285
14.8k
    return _res;
37286
9.70k
}
37287
37288
// _tmp_163: starred_expression | (assignment_expression | expression !':=') !'='
37289
static void *
37290
_tmp_163_rule(Parser *p)
37291
97.7k
{
37292
97.7k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37293
0
        _Pypegen_stack_overflow(p);
37294
0
    }
37295
97.7k
    if (p->error_indicator) {
37296
0
        p->level--;
37297
0
        return NULL;
37298
0
    }
37299
97.7k
    void * _res = NULL;
37300
97.7k
    int _mark = p->mark;
37301
97.7k
    { // starred_expression
37302
97.7k
        if (p->error_indicator) {
37303
0
            p->level--;
37304
0
            return NULL;
37305
0
        }
37306
97.7k
        D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
37307
97.7k
        expr_ty starred_expression_var;
37308
97.7k
        if (
37309
97.7k
            (starred_expression_var = starred_expression_rule(p))  // starred_expression
37310
97.7k
        )
37311
6.84k
        {
37312
6.84k
            D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression"));
37313
6.84k
            _res = starred_expression_var;
37314
6.84k
            goto done;
37315
6.84k
        }
37316
90.8k
        p->mark = _mark;
37317
90.8k
        D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ',
37318
90.8k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression"));
37319
90.8k
    }
37320
0
    { // (assignment_expression | expression !':=') !'='
37321
90.8k
        if (p->error_indicator) {
37322
274
            p->level--;
37323
274
            return NULL;
37324
274
        }
37325
90.5k
        D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='"));
37326
90.5k
        void *_tmp_86_var;
37327
90.5k
        if (
37328
90.5k
            (_tmp_86_var = _tmp_86_rule(p))  // assignment_expression | expression !':='
37329
90.5k
            &&
37330
90.5k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22)  // token='='
37331
90.5k
        )
37332
43.6k
        {
37333
43.6k
            D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='"));
37334
43.6k
            _res = _tmp_86_var;
37335
43.6k
            goto done;
37336
43.6k
        }
37337
46.9k
        p->mark = _mark;
37338
46.9k
        D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ',
37339
46.9k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(assignment_expression | expression !':=') !'='"));
37340
46.9k
    }
37341
0
    _res = NULL;
37342
97.4k
  done:
37343
97.4k
    p->level--;
37344
97.4k
    return _res;
37345
46.9k
}
37346
37347
// _tmp_164: ',' star_target
37348
static void *
37349
_tmp_164_rule(Parser *p)
37350
26.3k
{
37351
26.3k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37352
0
        _Pypegen_stack_overflow(p);
37353
0
    }
37354
26.3k
    if (p->error_indicator) {
37355
0
        p->level--;
37356
0
        return NULL;
37357
0
    }
37358
26.3k
    void * _res = NULL;
37359
26.3k
    int _mark = p->mark;
37360
26.3k
    { // ',' star_target
37361
26.3k
        if (p->error_indicator) {
37362
0
            p->level--;
37363
0
            return NULL;
37364
0
        }
37365
26.3k
        D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target"));
37366
26.3k
        Token * _literal;
37367
26.3k
        expr_ty c;
37368
26.3k
        if (
37369
26.3k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
37370
26.3k
            &&
37371
26.3k
            (c = star_target_rule(p))  // star_target
37372
26.3k
        )
37373
8.63k
        {
37374
8.63k
            D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target"));
37375
8.63k
            _res = c;
37376
8.63k
            if (_res == NULL && PyErr_Occurred()) {
37377
0
                p->error_indicator = 1;
37378
0
                p->level--;
37379
0
                return NULL;
37380
0
            }
37381
8.63k
            goto done;
37382
8.63k
        }
37383
17.7k
        p->mark = _mark;
37384
17.7k
        D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ',
37385
17.7k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target"));
37386
17.7k
    }
37387
0
    _res = NULL;
37388
26.3k
  done:
37389
26.3k
    p->level--;
37390
26.3k
    return _res;
37391
17.7k
}
37392
37393
// _tmp_165:
37394
//     | ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs
37395
static void *
37396
_tmp_165_rule(Parser *p)
37397
7.48k
{
37398
7.48k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37399
0
        _Pypegen_stack_overflow(p);
37400
0
    }
37401
7.48k
    if (p->error_indicator) {
37402
0
        p->level--;
37403
0
        return NULL;
37404
0
    }
37405
7.48k
    void * _res = NULL;
37406
7.48k
    int _mark = p->mark;
37407
7.48k
    { // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs
37408
7.48k
        if (p->error_indicator) {
37409
0
            p->level--;
37410
0
            return NULL;
37411
0
        }
37412
7.48k
        D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs"));
37413
7.48k
        asdl_seq * _gather_88_var;
37414
7.48k
        Token * _literal;
37415
7.48k
        asdl_seq* kwargs_var;
37416
7.48k
        if (
37417
7.48k
            (_gather_88_var = _gather_88_rule(p))  // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+
37418
7.48k
            &&
37419
7.48k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
37420
7.48k
            &&
37421
7.48k
            (kwargs_var = kwargs_rule(p))  // kwargs
37422
7.48k
        )
37423
333
        {
37424
333
            D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs"));
37425
333
            _res = _PyPegen_dummy_name(p, _gather_88_var, _literal, kwargs_var);
37426
333
            goto done;
37427
333
        }
37428
7.15k
        p->mark = _mark;
37429
7.15k
        D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ',
37430
7.15k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs"));
37431
7.15k
    }
37432
0
    _res = NULL;
37433
7.48k
  done:
37434
7.48k
    p->level--;
37435
7.48k
    return _res;
37436
7.15k
}
37437
37438
// _tmp_166: starred_expression !'='
37439
static void *
37440
_tmp_166_rule(Parser *p)
37441
1.94k
{
37442
1.94k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37443
0
        _Pypegen_stack_overflow(p);
37444
0
    }
37445
1.94k
    if (p->error_indicator) {
37446
0
        p->level--;
37447
0
        return NULL;
37448
0
    }
37449
1.94k
    void * _res = NULL;
37450
1.94k
    int _mark = p->mark;
37451
1.94k
    { // starred_expression !'='
37452
1.94k
        if (p->error_indicator) {
37453
0
            p->level--;
37454
0
            return NULL;
37455
0
        }
37456
1.94k
        D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression !'='"));
37457
1.94k
        expr_ty starred_expression_var;
37458
1.94k
        if (
37459
1.94k
            (starred_expression_var = starred_expression_rule(p))  // starred_expression
37460
1.94k
            &&
37461
1.94k
            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22)  // token='='
37462
1.94k
        )
37463
735
        {
37464
735
            D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression !'='"));
37465
735
            _res = starred_expression_var;
37466
735
            goto done;
37467
735
        }
37468
1.21k
        p->mark = _mark;
37469
1.21k
        D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ',
37470
1.21k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression !'='"));
37471
1.21k
    }
37472
0
    _res = NULL;
37473
1.94k
  done:
37474
1.94k
    p->level--;
37475
1.94k
    return _res;
37476
1.21k
}
37477
37478
// _tmp_167: !STRING expression_without_invalid
37479
static void *
37480
_tmp_167_rule(Parser *p)
37481
5.48k
{
37482
5.48k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37483
1
        _Pypegen_stack_overflow(p);
37484
1
    }
37485
5.48k
    if (p->error_indicator) {
37486
1
        p->level--;
37487
1
        return NULL;
37488
1
    }
37489
5.48k
    void * _res = NULL;
37490
5.48k
    int _mark = p->mark;
37491
5.48k
    { // !STRING expression_without_invalid
37492
5.48k
        if (p->error_indicator) {
37493
0
            p->level--;
37494
0
            return NULL;
37495
0
        }
37496
5.48k
        D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!STRING expression_without_invalid"));
37497
5.48k
        expr_ty expression_without_invalid_var;
37498
5.48k
        if (
37499
5.48k
            _PyPegen_lookahead(0, _PyPegen_string_token, p)
37500
5.48k
            &&
37501
5.48k
            (expression_without_invalid_var = expression_without_invalid_rule(p))  // expression_without_invalid
37502
5.48k
        )
37503
1.88k
        {
37504
1.88k
            D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!STRING expression_without_invalid"));
37505
1.88k
            _res = expression_without_invalid_var;
37506
1.88k
            goto done;
37507
1.88k
        }
37508
3.59k
        p->mark = _mark;
37509
3.59k
        D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ',
37510
3.59k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!STRING expression_without_invalid"));
37511
3.59k
    }
37512
0
    _res = NULL;
37513
5.48k
  done:
37514
5.48k
    p->level--;
37515
5.48k
    return _res;
37516
3.59k
}
37517
37518
// _tmp_168: ')' | '**'
37519
static void *
37520
_tmp_168_rule(Parser *p)
37521
653
{
37522
653
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37523
0
        _Pypegen_stack_overflow(p);
37524
0
    }
37525
653
    if (p->error_indicator) {
37526
0
        p->level--;
37527
0
        return NULL;
37528
0
    }
37529
653
    void * _res = NULL;
37530
653
    int _mark = p->mark;
37531
653
    { // ')'
37532
653
        if (p->error_indicator) {
37533
0
            p->level--;
37534
0
            return NULL;
37535
0
        }
37536
653
        D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
37537
653
        Token * _literal;
37538
653
        if (
37539
653
            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
37540
653
        )
37541
1
        {
37542
1
            D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
37543
1
            _res = _literal;
37544
1
            goto done;
37545
1
        }
37546
652
        p->mark = _mark;
37547
652
        D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ',
37548
652
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
37549
652
    }
37550
0
    { // '**'
37551
652
        if (p->error_indicator) {
37552
0
            p->level--;
37553
0
            return NULL;
37554
0
        }
37555
652
        D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
37556
652
        Token * _literal;
37557
652
        if (
37558
652
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
37559
652
        )
37560
1
        {
37561
1
            D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'"));
37562
1
            _res = _literal;
37563
1
            goto done;
37564
1
        }
37565
651
        p->mark = _mark;
37566
651
        D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ',
37567
651
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'"));
37568
651
    }
37569
0
    _res = NULL;
37570
653
  done:
37571
653
    p->level--;
37572
653
    return _res;
37573
651
}
37574
37575
// _tmp_169: ':' | '**'
37576
static void *
37577
_tmp_169_rule(Parser *p)
37578
1.23k
{
37579
1.23k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37580
0
        _Pypegen_stack_overflow(p);
37581
0
    }
37582
1.23k
    if (p->error_indicator) {
37583
0
        p->level--;
37584
0
        return NULL;
37585
0
    }
37586
1.23k
    void * _res = NULL;
37587
1.23k
    int _mark = p->mark;
37588
1.23k
    { // ':'
37589
1.23k
        if (p->error_indicator) {
37590
0
            p->level--;
37591
0
            return NULL;
37592
0
        }
37593
1.23k
        D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
37594
1.23k
        Token * _literal;
37595
1.23k
        if (
37596
1.23k
            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
37597
1.23k
        )
37598
3
        {
37599
3
            D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
37600
3
            _res = _literal;
37601
3
            goto done;
37602
3
        }
37603
1.23k
        p->mark = _mark;
37604
1.23k
        D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ',
37605
1.23k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
37606
1.23k
    }
37607
0
    { // '**'
37608
1.23k
        if (p->error_indicator) {
37609
0
            p->level--;
37610
0
            return NULL;
37611
0
        }
37612
1.23k
        D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
37613
1.23k
        Token * _literal;
37614
1.23k
        if (
37615
1.23k
            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
37616
1.23k
        )
37617
1
        {
37618
1
            D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'"));
37619
1
            _res = _literal;
37620
1
            goto done;
37621
1
        }
37622
1.23k
        p->mark = _mark;
37623
1.23k
        D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ',
37624
1.23k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'"));
37625
1.23k
    }
37626
0
    _res = NULL;
37627
1.23k
  done:
37628
1.23k
    p->level--;
37629
1.23k
    return _res;
37630
1.23k
}
37631
37632
// _loop0_170: (',' bitwise_or)
37633
static asdl_seq *
37634
_loop0_170_rule(Parser *p)
37635
269
{
37636
269
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37637
0
        _Pypegen_stack_overflow(p);
37638
0
    }
37639
269
    if (p->error_indicator) {
37640
0
        p->level--;
37641
0
        return NULL;
37642
0
    }
37643
269
    void *_res = NULL;
37644
269
    int _mark = p->mark;
37645
269
    void **_children = PyMem_Malloc(sizeof(void *));
37646
269
    if (!_children) {
37647
0
        p->error_indicator = 1;
37648
0
        PyErr_NoMemory();
37649
0
        p->level--;
37650
0
        return NULL;
37651
0
    }
37652
269
    Py_ssize_t _children_capacity = 1;
37653
269
    Py_ssize_t _n = 0;
37654
269
    { // (',' bitwise_or)
37655
269
        if (p->error_indicator) {
37656
0
            p->level--;
37657
0
            return NULL;
37658
0
        }
37659
269
        D(fprintf(stderr, "%*c> _loop0_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' bitwise_or)"));
37660
269
        void *_tmp_174_var;
37661
269
        while (
37662
1.10k
            (_tmp_174_var = _tmp_174_rule(p))  // ',' bitwise_or
37663
269
        )
37664
832
        {
37665
832
            _res = _tmp_174_var;
37666
832
            if (_n == _children_capacity) {
37667
344
                _children_capacity *= 2;
37668
344
                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
37669
344
                if (!_new_children) {
37670
0
                    PyMem_Free(_children);
37671
0
                    p->error_indicator = 1;
37672
0
                    PyErr_NoMemory();
37673
0
                    p->level--;
37674
0
                    return NULL;
37675
0
                }
37676
344
                _children = _new_children;
37677
344
            }
37678
832
            _children[_n++] = _res;
37679
832
            _mark = p->mark;
37680
832
        }
37681
269
        p->mark = _mark;
37682
269
        D(fprintf(stderr, "%*c%s _loop0_170[%d-%d]: %s failed!\n", p->level, ' ',
37683
269
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' bitwise_or)"));
37684
269
    }
37685
0
    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
37686
269
    if (!_seq) {
37687
0
        PyMem_Free(_children);
37688
0
        p->error_indicator = 1;
37689
0
        PyErr_NoMemory();
37690
0
        p->level--;
37691
0
        return NULL;
37692
0
    }
37693
1.10k
    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
37694
269
    PyMem_Free(_children);
37695
269
    p->level--;
37696
269
    return _seq;
37697
269
}
37698
37699
// _tmp_171: ',' | ')' | NEWLINE
37700
static void *
37701
_tmp_171_rule(Parser *p)
37702
452
{
37703
452
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37704
0
        _Pypegen_stack_overflow(p);
37705
0
    }
37706
452
    if (p->error_indicator) {
37707
0
        p->level--;
37708
0
        return NULL;
37709
0
    }
37710
452
    void * _res = NULL;
37711
452
    int _mark = p->mark;
37712
452
    { // ','
37713
452
        if (p->error_indicator) {
37714
0
            p->level--;
37715
0
            return NULL;
37716
0
        }
37717
452
        D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
37718
452
        Token * _literal;
37719
452
        if (
37720
452
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
37721
452
        )
37722
309
        {
37723
309
            D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
37724
309
            _res = _literal;
37725
309
            goto done;
37726
309
        }
37727
143
        p->mark = _mark;
37728
143
        D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ',
37729
143
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
37730
143
    }
37731
0
    { // ')'
37732
143
        if (p->error_indicator) {
37733
1
            p->level--;
37734
1
            return NULL;
37735
1
        }
37736
142
        D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
37737
142
        Token * _literal;
37738
142
        if (
37739
142
            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
37740
142
        )
37741
10
        {
37742
10
            D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
37743
10
            _res = _literal;
37744
10
            goto done;
37745
10
        }
37746
132
        p->mark = _mark;
37747
132
        D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ',
37748
132
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
37749
132
    }
37750
0
    { // NEWLINE
37751
132
        if (p->error_indicator) {
37752
0
            p->level--;
37753
0
            return NULL;
37754
0
        }
37755
132
        D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
37756
132
        Token * newline_var;
37757
132
        if (
37758
132
            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
37759
132
        )
37760
116
        {
37761
116
            D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
37762
116
            _res = newline_var;
37763
116
            goto done;
37764
116
        }
37765
16
        p->mark = _mark;
37766
16
        D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ',
37767
16
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
37768
16
    }
37769
0
    _res = NULL;
37770
451
  done:
37771
451
    p->level--;
37772
451
    return _res;
37773
16
}
37774
37775
// _tmp_172: expression ['as' star_target]
37776
static void *
37777
_tmp_172_rule(Parser *p)
37778
4.16k
{
37779
4.16k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37780
0
        _Pypegen_stack_overflow(p);
37781
0
    }
37782
4.16k
    if (p->error_indicator) {
37783
0
        p->level--;
37784
0
        return NULL;
37785
0
    }
37786
4.16k
    void * _res = NULL;
37787
4.16k
    int _mark = p->mark;
37788
4.16k
    { // expression ['as' star_target]
37789
4.16k
        if (p->error_indicator) {
37790
0
            p->level--;
37791
0
            return NULL;
37792
0
        }
37793
4.16k
        D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]"));
37794
4.16k
        void *_opt_var;
37795
4.16k
        UNUSED(_opt_var); // Silence compiler warnings
37796
4.16k
        expr_ty expression_var;
37797
4.16k
        if (
37798
4.16k
            (expression_var = expression_rule(p))  // expression
37799
4.16k
            &&
37800
4.16k
            (_opt_var = _tmp_175_rule(p), !p->error_indicator)  // ['as' star_target]
37801
4.16k
        )
37802
3.81k
        {
37803
3.81k
            D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]"));
37804
3.81k
            _res = _PyPegen_dummy_name(p, expression_var, _opt_var);
37805
3.81k
            goto done;
37806
3.81k
        }
37807
341
        p->mark = _mark;
37808
341
        D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ',
37809
341
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]"));
37810
341
    }
37811
0
    _res = NULL;
37812
4.16k
  done:
37813
4.16k
    p->level--;
37814
4.16k
    return _res;
37815
341
}
37816
37817
// _tmp_173: expressions ['as' star_target]
37818
static void *
37819
_tmp_173_rule(Parser *p)
37820
2.63k
{
37821
2.63k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37822
0
        _Pypegen_stack_overflow(p);
37823
0
    }
37824
2.63k
    if (p->error_indicator) {
37825
0
        p->level--;
37826
0
        return NULL;
37827
0
    }
37828
2.63k
    void * _res = NULL;
37829
2.63k
    int _mark = p->mark;
37830
2.63k
    { // expressions ['as' star_target]
37831
2.63k
        if (p->error_indicator) {
37832
0
            p->level--;
37833
0
            return NULL;
37834
0
        }
37835
2.63k
        D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]"));
37836
2.63k
        void *_opt_var;
37837
2.63k
        UNUSED(_opt_var); // Silence compiler warnings
37838
2.63k
        expr_ty expressions_var;
37839
2.63k
        if (
37840
2.63k
            (expressions_var = expressions_rule(p))  // expressions
37841
2.63k
            &&
37842
2.63k
            (_opt_var = _tmp_175_rule(p), !p->error_indicator)  // ['as' star_target]
37843
2.63k
        )
37844
2.21k
        {
37845
2.21k
            D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]"));
37846
2.21k
            _res = _PyPegen_dummy_name(p, expressions_var, _opt_var);
37847
2.21k
            goto done;
37848
2.21k
        }
37849
424
        p->mark = _mark;
37850
424
        D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ',
37851
424
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]"));
37852
424
    }
37853
0
    _res = NULL;
37854
2.63k
  done:
37855
2.63k
    p->level--;
37856
2.63k
    return _res;
37857
424
}
37858
37859
// _tmp_174: ',' bitwise_or
37860
static void *
37861
_tmp_174_rule(Parser *p)
37862
1.10k
{
37863
1.10k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37864
0
        _Pypegen_stack_overflow(p);
37865
0
    }
37866
1.10k
    if (p->error_indicator) {
37867
0
        p->level--;
37868
0
        return NULL;
37869
0
    }
37870
1.10k
    void * _res = NULL;
37871
1.10k
    int _mark = p->mark;
37872
1.10k
    { // ',' bitwise_or
37873
1.10k
        if (p->error_indicator) {
37874
0
            p->level--;
37875
0
            return NULL;
37876
0
        }
37877
1.10k
        D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' bitwise_or"));
37878
1.10k
        Token * _literal;
37879
1.10k
        expr_ty bitwise_or_var;
37880
1.10k
        if (
37881
1.10k
            (_literal = _PyPegen_expect_token(p, 12))  // token=','
37882
1.10k
            &&
37883
1.10k
            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
37884
1.10k
        )
37885
832
        {
37886
832
            D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' bitwise_or"));
37887
832
            _res = _PyPegen_dummy_name(p, _literal, bitwise_or_var);
37888
832
            goto done;
37889
832
        }
37890
269
        p->mark = _mark;
37891
269
        D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ',
37892
269
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' bitwise_or"));
37893
269
    }
37894
0
    _res = NULL;
37895
1.10k
  done:
37896
1.10k
    p->level--;
37897
1.10k
    return _res;
37898
269
}
37899
37900
// _tmp_175: 'as' star_target
37901
static void *
37902
_tmp_175_rule(Parser *p)
37903
6.03k
{
37904
6.03k
    if (p->level++ == MAXSTACK || _Py_ReachedRecursionLimitWithMargin(PyThreadState_Get(), 1)) {
37905
0
        _Pypegen_stack_overflow(p);
37906
0
    }
37907
6.03k
    if (p->error_indicator) {
37908
0
        p->level--;
37909
0
        return NULL;
37910
0
    }
37911
6.03k
    void * _res = NULL;
37912
6.03k
    int _mark = p->mark;
37913
6.03k
    { // 'as' star_target
37914
6.03k
        if (p->error_indicator) {
37915
0
            p->level--;
37916
0
            return NULL;
37917
0
        }
37918
6.03k
        D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target"));
37919
6.03k
        Token * _keyword;
37920
6.03k
        expr_ty star_target_var;
37921
6.03k
        if (
37922
6.03k
            (_keyword = _PyPegen_expect_token(p, 685))  // token='as'
37923
6.03k
            &&
37924
6.03k
            (star_target_var = star_target_rule(p))  // star_target
37925
6.03k
        )
37926
693
        {
37927
693
            D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target"));
37928
693
            _res = _PyPegen_dummy_name(p, _keyword, star_target_var);
37929
693
            goto done;
37930
693
        }
37931
5.34k
        p->mark = _mark;
37932
5.34k
        D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ',
37933
5.34k
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target"));
37934
5.34k
    }
37935
0
    _res = NULL;
37936
6.03k
  done:
37937
6.03k
    p->level--;
37938
6.03k
    return _res;
37939
5.34k
}
37940
37941
void *
37942
_PyPegen_parse(Parser *p)
37943
31.2k
{
37944
    // Initialize keywords
37945
31.2k
    p->keywords = reserved_keywords;
37946
31.2k
    p->n_keyword_lists = n_keyword_lists;
37947
31.2k
    p->soft_keywords = soft_keywords;
37948
37949
    // Run parser
37950
31.2k
    void *result = NULL;
37951
31.2k
    if (p->start_rule == Py_file_input) {
37952
31.2k
        result = file_rule(p);
37953
31.2k
    } else if (p->start_rule == Py_single_input) {
37954
0
        result = interactive_rule(p);
37955
43
    } else if (p->start_rule == Py_eval_input) {
37956
43
        result = eval_rule(p);
37957
43
    } else if (p->start_rule == Py_func_type_input) {
37958
0
        result = func_type_rule(p);
37959
0
    }
37960
37961
31.2k
    return result;
37962
31.2k
}