From e2fd9de64275ae5a1333e2b4808507e9b1693d66 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 27 Apr 2020 20:55:02 +0300 Subject: [PATCH 1/5] Support Python 3.7 in the PEG generator --- Parser/pegen/parse.c | 360 ++++++++++ Tools/peg_generator/pegen/__main__.py | 4 +- Tools/peg_generator/pegen/grammar_parser.py | 657 ++++++++---------- Tools/peg_generator/pegen/python_generator.py | 50 +- Tools/peg_generator/pegen/testutil.py | 4 +- Tools/peg_generator/pegen/tokenizer.py | 2 +- .../peg_generator/scripts/grammar_grapher.py | 8 +- 7 files changed, 695 insertions(+), 390 deletions(-) diff --git a/Parser/pegen/parse.c b/Parser/pegen/parse.c index b26f7327bd273b..2a8082624e91e8 100644 --- a/Parser/pegen/parse.c +++ b/Parser/pegen/parse.c @@ -641,6 +641,8 @@ file_rule(Parser *p) return NULL; } mod_ty res = NULL; + if (_PyPegen_is_memoized(p, file_type, &res)) + return res; int mark = p->mark; { // statements? $ void *a; @@ -662,6 +664,7 @@ file_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, file_type, res); return res; } @@ -673,6 +676,8 @@ interactive_rule(Parser *p) return NULL; } mod_ty res = NULL; + if (_PyPegen_is_memoized(p, interactive_type, &res)) + return res; int mark = p->mark; { // statement_newline asdl_seq* a; @@ -691,6 +696,7 @@ interactive_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, interactive_type, res); return res; } @@ -702,6 +708,8 @@ eval_rule(Parser *p) return NULL; } mod_ty res = NULL; + if (_PyPegen_is_memoized(p, eval_type, &res)) + return res; int mark = p->mark; { // expressions NEWLINE* $ asdl_seq * _loop0_1_var; @@ -726,6 +734,7 @@ eval_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, eval_type, res); return res; } @@ -737,6 +746,8 @@ fstring_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, fstring_type, &res)) + return res; int mark = p->mark; { // star_expressions expr_ty star_expressions_var; @@ -751,6 +762,7 @@ fstring_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, fstring_type, res); return res; } @@ -762,6 +774,8 @@ statements_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, statements_type, &res)) + return res; int mark = p->mark; { // statement+ asdl_seq * a; @@ -780,6 +794,7 @@ statements_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, statements_type, res); return res; } @@ -791,6 +806,8 @@ statement_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, statement_type, &res)) + return res; int mark = p->mark; { // compound_stmt stmt_ty a; @@ -820,6 +837,7 @@ statement_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, statement_type, res); return res; } @@ -831,6 +849,8 @@ statement_newline_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, statement_newline_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -909,6 +929,7 @@ statement_newline_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, statement_newline_type, res); return res; } @@ -920,6 +941,8 @@ simple_stmt_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, simple_stmt_type, &res)) + return res; int mark = p->mark; { // small_stmt !';' NEWLINE stmt_ty a; @@ -965,6 +988,7 @@ simple_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, simple_stmt_type, res); return res; } @@ -1228,6 +1252,8 @@ compound_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, compound_stmt_type, &res)) + return res; int mark = p->mark; { // &('def' | '@' | ASYNC) function_def stmt_ty function_def_var; @@ -1322,6 +1348,7 @@ compound_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, compound_stmt_type, res); return res; } @@ -1338,6 +1365,8 @@ assignment_rule(Parser *p) return NULL; } void * res = NULL; + if (_PyPegen_is_memoized(p, assignment_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1479,6 +1508,7 @@ assignment_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, assignment_type, res); return res; } @@ -1503,6 +1533,8 @@ augassign_rule(Parser *p) return NULL; } AugOperator* res = NULL; + if (_PyPegen_is_memoized(p, augassign_type, &res)) + return res; int mark = p->mark; { // '+=' void *literal; @@ -1701,6 +1733,7 @@ augassign_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, augassign_type, res); return res; } @@ -1712,6 +1745,8 @@ global_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, global_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1749,6 +1784,7 @@ global_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, global_stmt_type, res); return res; } @@ -1760,6 +1796,8 @@ nonlocal_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, nonlocal_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1797,6 +1835,7 @@ nonlocal_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, nonlocal_stmt_type, res); return res; } @@ -1808,6 +1847,8 @@ yield_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, yield_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1842,6 +1883,7 @@ yield_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, yield_stmt_type, res); return res; } @@ -1853,6 +1895,8 @@ assert_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, assert_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1893,6 +1937,7 @@ assert_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, assert_stmt_type, res); return res; } @@ -1904,6 +1949,8 @@ del_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, del_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1941,6 +1988,7 @@ del_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, del_stmt_type, res); return res; } @@ -1952,6 +2000,8 @@ import_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, import_stmt_type, &res)) + return res; int mark = p->mark; { // import_name stmt_ty import_name_var; @@ -1977,6 +2027,7 @@ import_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, import_stmt_type, res); return res; } @@ -1988,6 +2039,8 @@ import_name_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, import_name_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2025,6 +2078,7 @@ import_name_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, import_name_type, res); return res; } @@ -2038,6 +2092,8 @@ import_from_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, import_from_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2116,6 +2172,7 @@ import_from_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, import_from_type, res); return res; } @@ -2127,6 +2184,8 @@ import_from_targets_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, import_from_targets_type, &res)) + return res; int mark = p->mark; { // '(' import_from_as_names ','? ')' asdl_seq* a; @@ -2181,6 +2240,7 @@ import_from_targets_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, import_from_targets_type, res); return res; } @@ -2192,6 +2252,8 @@ import_from_as_names_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, import_from_as_names_type, &res)) + return res; int mark = p->mark; { // ','.import_from_as_name+ asdl_seq * a; @@ -2210,6 +2272,7 @@ import_from_as_names_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, import_from_as_names_type, res); return res; } @@ -2221,6 +2284,8 @@ import_from_as_name_rule(Parser *p) return NULL; } alias_ty res = NULL; + if (_PyPegen_is_memoized(p, import_from_as_name_type, &res)) + return res; int mark = p->mark; { // NAME ['as' NAME] expr_ty a; @@ -2242,6 +2307,7 @@ import_from_as_name_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, import_from_as_name_type, res); return res; } @@ -2253,6 +2319,8 @@ dotted_as_names_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, dotted_as_names_type, &res)) + return res; int mark = p->mark; { // ','.dotted_as_name+ asdl_seq * a; @@ -2271,6 +2339,7 @@ dotted_as_names_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, dotted_as_names_type, res); return res; } @@ -2282,6 +2351,8 @@ dotted_as_name_rule(Parser *p) return NULL; } alias_ty res = NULL; + if (_PyPegen_is_memoized(p, dotted_as_name_type, &res)) + return res; int mark = p->mark; { // dotted_name ['as' NAME] expr_ty a; @@ -2303,6 +2374,7 @@ dotted_as_name_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, dotted_as_name_type, res); return res; } @@ -2387,6 +2459,8 @@ if_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, if_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2468,6 +2542,7 @@ if_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, if_stmt_type, res); return res; } @@ -2481,6 +2556,8 @@ elif_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, elif_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2562,6 +2639,7 @@ elif_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, elif_stmt_type, res); return res; } @@ -2573,6 +2651,8 @@ else_block_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, else_block_type, &res)) + return res; int mark = p->mark; { // 'else' ':' block asdl_seq* b; @@ -2597,6 +2677,7 @@ else_block_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, else_block_type, res); return res; } @@ -2608,6 +2689,8 @@ while_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, while_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2654,6 +2737,7 @@ while_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, while_stmt_type, res); return res; } @@ -2665,6 +2749,8 @@ for_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, for_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2720,6 +2806,7 @@ for_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, for_stmt_type, res); return res; } @@ -2733,6 +2820,8 @@ with_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, with_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2820,6 +2909,7 @@ with_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, with_stmt_type, res); return res; } @@ -2831,6 +2921,8 @@ with_item_rule(Parser *p) return NULL; } withitem_ty res = NULL; + if (_PyPegen_is_memoized(p, with_item_type, &res)) + return res; int mark = p->mark; { // expression ['as' target] expr_ty e; @@ -2852,6 +2944,7 @@ with_item_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, with_item_type, res); return res; } @@ -2865,6 +2958,8 @@ try_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, try_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2946,6 +3041,7 @@ try_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, try_stmt_type, res); return res; } @@ -2957,6 +3053,8 @@ except_block_rule(Parser *p) return NULL; } excepthandler_ty res = NULL; + if (_PyPegen_is_memoized(p, except_block_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3032,6 +3130,7 @@ except_block_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, except_block_type, res); return res; } @@ -3043,6 +3142,8 @@ finally_block_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, finally_block_type, &res)) + return res; int mark = p->mark; { // 'finally' ':' block asdl_seq* a; @@ -3067,6 +3168,7 @@ finally_block_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, finally_block_type, res); return res; } @@ -3078,6 +3180,8 @@ return_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, return_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3115,6 +3219,7 @@ return_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, return_stmt_type, res); return res; } @@ -3126,6 +3231,8 @@ raise_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, raise_stmt_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3189,6 +3296,7 @@ raise_stmt_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, raise_stmt_type, res); return res; } @@ -3200,6 +3308,8 @@ function_def_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, function_def_type, &res)) + return res; int mark = p->mark; { // decorators function_def_raw asdl_seq* d; @@ -3232,6 +3342,7 @@ function_def_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, function_def_type, res); return res; } @@ -3243,6 +3354,8 @@ function_def_raw_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, function_def_raw_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3301,6 +3414,7 @@ function_def_raw_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, function_def_raw_type, res); return res; } @@ -3312,6 +3426,8 @@ params_rule(Parser *p) return NULL; } arguments_ty res = NULL; + if (_PyPegen_is_memoized(p, params_type, &res)) + return res; int mark = p->mark; { // invalid_parameters void *invalid_parameters_var; @@ -3337,6 +3453,7 @@ params_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, params_type, res); return res; } @@ -3353,6 +3470,8 @@ parameters_rule(Parser *p) return NULL; } arguments_ty res = NULL; + if (_PyPegen_is_memoized(p, parameters_type, &res)) + return res; int mark = p->mark; { // slash_without_default [',' plain_names] [',' names_with_default] [',' star_etc?] asdl_seq* a; @@ -3455,6 +3574,7 @@ parameters_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, parameters_type, res); return res; } @@ -3466,6 +3586,8 @@ slash_without_default_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, slash_without_default_type, &res)) + return res; int mark = p->mark; { // plain_names ',' '/' asdl_seq* a; @@ -3490,6 +3612,7 @@ slash_without_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, slash_without_default_type, res); return res; } @@ -3501,6 +3624,8 @@ slash_with_default_rule(Parser *p) return NULL; } SlashWithDefault* res = NULL; + if (_PyPegen_is_memoized(p, slash_with_default_type, &res)) + return res; int mark = p->mark; { // [plain_names ','] names_with_default ',' '/' void *a; @@ -3528,6 +3653,7 @@ slash_with_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, slash_with_default_type, res); return res; } @@ -3542,6 +3668,8 @@ star_etc_rule(Parser *p) return NULL; } StarEtc* res = NULL; + if (_PyPegen_is_memoized(p, star_etc_type, &res)) + return res; int mark = p->mark; { // '*' plain_name name_with_optional_default* [',' kwds] ','? arg_ty a; @@ -3617,6 +3745,7 @@ star_etc_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, star_etc_type, res); return res; } @@ -3628,6 +3757,8 @@ name_with_optional_default_rule(Parser *p) return NULL; } NameDefaultPair* res = NULL; + if (_PyPegen_is_memoized(p, name_with_optional_default_type, &res)) + return res; int mark = p->mark; { // ',' plain_name ['=' expression] arg_ty a; @@ -3652,6 +3783,7 @@ name_with_optional_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, name_with_optional_default_type, res); return res; } @@ -3663,6 +3795,8 @@ names_with_default_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, names_with_default_type, &res)) + return res; int mark = p->mark; { // ','.name_with_default+ asdl_seq * a; @@ -3681,6 +3815,7 @@ names_with_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, names_with_default_type, res); return res; } @@ -3692,6 +3827,8 @@ name_with_default_rule(Parser *p) return NULL; } NameDefaultPair* res = NULL; + if (_PyPegen_is_memoized(p, name_with_default_type, &res)) + return res; int mark = p->mark; { // plain_name '=' expression expr_ty e; @@ -3716,6 +3853,7 @@ name_with_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, name_with_default_type, res); return res; } @@ -3759,6 +3897,8 @@ plain_name_rule(Parser *p) return NULL; } arg_ty res = NULL; + if (_PyPegen_is_memoized(p, plain_name_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3796,6 +3936,7 @@ plain_name_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, plain_name_type, res); return res; } @@ -3807,6 +3948,8 @@ kwds_rule(Parser *p) return NULL; } arg_ty res = NULL; + if (_PyPegen_is_memoized(p, kwds_type, &res)) + return res; int mark = p->mark; { // '**' plain_name arg_ty a; @@ -3828,6 +3971,7 @@ kwds_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, kwds_type, res); return res; } @@ -3839,6 +3983,8 @@ annotation_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, annotation_type, &res)) + return res; int mark = p->mark; { // expression expr_ty expression_var; @@ -3853,6 +3999,7 @@ annotation_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, annotation_type, res); return res; } @@ -3864,6 +4011,8 @@ decorators_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, decorators_type, &res)) + return res; int mark = p->mark; { // (('@' named_expression NEWLINE))+ asdl_seq * a; @@ -3882,6 +4031,7 @@ decorators_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, decorators_type, res); return res; } @@ -3893,6 +4043,8 @@ class_def_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, class_def_type, &res)) + return res; int mark = p->mark; { // decorators class_def_raw asdl_seq* a; @@ -3925,6 +4077,7 @@ class_def_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, class_def_type, res); return res; } @@ -3936,6 +4089,8 @@ class_def_raw_rule(Parser *p) return NULL; } stmt_ty res = NULL; + if (_PyPegen_is_memoized(p, class_def_raw_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3982,6 +4137,7 @@ class_def_raw_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, class_def_raw_type, res); return res; } @@ -4056,6 +4212,8 @@ expressions_list_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, expressions_list_type, &res)) + return res; int mark = p->mark; { // ','.star_expression+ ','? asdl_seq * a; @@ -4078,6 +4236,7 @@ expressions_list_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, expressions_list_type, res); return res; } @@ -4092,6 +4251,8 @@ star_expressions_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, star_expressions_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4170,6 +4331,7 @@ star_expressions_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, star_expressions_type, res); return res; } @@ -4243,6 +4405,8 @@ star_named_expressions_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, star_named_expressions_type, &res)) + return res; int mark = p->mark; { // ','.star_named_expression+ ','? asdl_seq * a; @@ -4265,6 +4429,7 @@ star_named_expressions_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, star_named_expressions_type, res); return res; } @@ -4276,6 +4441,8 @@ star_named_expression_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, star_named_expression_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4324,6 +4491,7 @@ star_named_expression_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, star_named_expression_type, res); return res; } @@ -4335,6 +4503,8 @@ named_expression_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, named_expression_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4399,6 +4569,7 @@ named_expression_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, named_expression_type, res); return res; } @@ -4410,6 +4581,8 @@ annotated_rhs_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, annotated_rhs_type, &res)) + return res; int mark = p->mark; { // yield_expr expr_ty yield_expr_var; @@ -4435,6 +4608,7 @@ annotated_rhs_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, annotated_rhs_type, res); return res; } @@ -4446,6 +4620,8 @@ expressions_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, expressions_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4524,6 +4700,7 @@ expressions_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, expressions_type, res); return res; } @@ -4617,6 +4794,8 @@ lambdef_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, lambdef_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4660,6 +4839,7 @@ lambdef_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambdef_type, res); return res; } @@ -4676,6 +4856,8 @@ lambda_parameters_rule(Parser *p) return NULL; } arguments_ty res = NULL; + if (_PyPegen_is_memoized(p, lambda_parameters_type, &res)) + return res; int mark = p->mark; { // lambda_slash_without_default [',' lambda_plain_names] [',' lambda_names_with_default] [',' lambda_star_etc?] asdl_seq* a; @@ -4778,6 +4960,7 @@ lambda_parameters_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_parameters_type, res); return res; } @@ -4789,6 +4972,8 @@ lambda_slash_without_default_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, lambda_slash_without_default_type, &res)) + return res; int mark = p->mark; { // lambda_plain_names ',' '/' asdl_seq* a; @@ -4813,6 +4998,7 @@ lambda_slash_without_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_slash_without_default_type, res); return res; } @@ -4824,6 +5010,8 @@ lambda_slash_with_default_rule(Parser *p) return NULL; } SlashWithDefault* res = NULL; + if (_PyPegen_is_memoized(p, lambda_slash_with_default_type, &res)) + return res; int mark = p->mark; { // [lambda_plain_names ','] lambda_names_with_default ',' '/' void *a; @@ -4851,6 +5039,7 @@ lambda_slash_with_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_slash_with_default_type, res); return res; } @@ -4865,6 +5054,8 @@ lambda_star_etc_rule(Parser *p) return NULL; } StarEtc* res = NULL; + if (_PyPegen_is_memoized(p, lambda_star_etc_type, &res)) + return res; int mark = p->mark; { // '*' lambda_plain_name lambda_name_with_optional_default* [',' lambda_kwds] ','? arg_ty a; @@ -4940,6 +5131,7 @@ lambda_star_etc_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_star_etc_type, res); return res; } @@ -4951,6 +5143,8 @@ lambda_name_with_optional_default_rule(Parser *p) return NULL; } NameDefaultPair* res = NULL; + if (_PyPegen_is_memoized(p, lambda_name_with_optional_default_type, &res)) + return res; int mark = p->mark; { // ',' lambda_plain_name ['=' expression] arg_ty a; @@ -4975,6 +5169,7 @@ lambda_name_with_optional_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_name_with_optional_default_type, res); return res; } @@ -4986,6 +5181,8 @@ lambda_names_with_default_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, lambda_names_with_default_type, &res)) + return res; int mark = p->mark; { // ','.lambda_name_with_default+ asdl_seq * a; @@ -5004,6 +5201,7 @@ lambda_names_with_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_names_with_default_type, res); return res; } @@ -5015,6 +5213,8 @@ lambda_name_with_default_rule(Parser *p) return NULL; } NameDefaultPair* res = NULL; + if (_PyPegen_is_memoized(p, lambda_name_with_default_type, &res)) + return res; int mark = p->mark; { // lambda_plain_name '=' expression expr_ty e; @@ -5039,6 +5239,7 @@ lambda_name_with_default_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_name_with_default_type, res); return res; } @@ -5050,6 +5251,8 @@ lambda_plain_names_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, lambda_plain_names_type, &res)) + return res; int mark = p->mark; { // ','.(lambda_plain_name !'=')+ asdl_seq * a; @@ -5068,6 +5271,7 @@ lambda_plain_names_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_plain_names_type, res); return res; } @@ -5079,6 +5283,8 @@ lambda_plain_name_rule(Parser *p) return NULL; } arg_ty res = NULL; + if (_PyPegen_is_memoized(p, lambda_plain_name_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5113,6 +5319,7 @@ lambda_plain_name_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_plain_name_type, res); return res; } @@ -5124,6 +5331,8 @@ lambda_kwds_rule(Parser *p) return NULL; } arg_ty res = NULL; + if (_PyPegen_is_memoized(p, lambda_kwds_type, &res)) + return res; int mark = p->mark; { // '**' lambda_plain_name arg_ty a; @@ -5145,6 +5354,7 @@ lambda_kwds_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lambda_kwds_type, res); return res; } @@ -5342,6 +5552,8 @@ comparison_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, comparison_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5390,6 +5602,7 @@ comparison_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, comparison_type, res); return res; } @@ -5411,6 +5624,8 @@ compare_op_bitwise_or_pair_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, compare_op_bitwise_or_pair_type, &res)) + return res; int mark = p->mark; { // eq_bitwise_or CmpopExprPair* eq_bitwise_or_var; @@ -5524,6 +5739,7 @@ compare_op_bitwise_or_pair_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, compare_op_bitwise_or_pair_type, res); return res; } @@ -5535,6 +5751,8 @@ eq_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, eq_bitwise_or_type, &res)) + return res; int mark = p->mark; { // '==' bitwise_or expr_ty a; @@ -5556,6 +5774,7 @@ eq_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, eq_bitwise_or_type, res); return res; } @@ -5567,6 +5786,8 @@ noteq_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, noteq_bitwise_or_type, &res)) + return res; int mark = p->mark; { // ('!=') bitwise_or void *_tmp_86_var; @@ -5588,6 +5809,7 @@ noteq_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, noteq_bitwise_or_type, res); return res; } @@ -5599,6 +5821,8 @@ lte_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, lte_bitwise_or_type, &res)) + return res; int mark = p->mark; { // '<=' bitwise_or expr_ty a; @@ -5620,6 +5844,7 @@ lte_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lte_bitwise_or_type, res); return res; } @@ -5631,6 +5856,8 @@ lt_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, lt_bitwise_or_type, &res)) + return res; int mark = p->mark; { // '<' bitwise_or expr_ty a; @@ -5652,6 +5879,7 @@ lt_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, lt_bitwise_or_type, res); return res; } @@ -5663,6 +5891,8 @@ gte_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, gte_bitwise_or_type, &res)) + return res; int mark = p->mark; { // '>=' bitwise_or expr_ty a; @@ -5684,6 +5914,7 @@ gte_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, gte_bitwise_or_type, res); return res; } @@ -5695,6 +5926,8 @@ gt_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, gt_bitwise_or_type, &res)) + return res; int mark = p->mark; { // '>' bitwise_or expr_ty a; @@ -5716,6 +5949,7 @@ gt_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, gt_bitwise_or_type, res); return res; } @@ -5727,6 +5961,8 @@ notin_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, notin_bitwise_or_type, &res)) + return res; int mark = p->mark; { // 'not' 'in' bitwise_or expr_ty a; @@ -5751,6 +5987,7 @@ notin_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, notin_bitwise_or_type, res); return res; } @@ -5762,6 +5999,8 @@ in_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, in_bitwise_or_type, &res)) + return res; int mark = p->mark; { // 'in' bitwise_or expr_ty a; @@ -5783,6 +6022,7 @@ in_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, in_bitwise_or_type, res); return res; } @@ -5794,6 +6034,8 @@ isnot_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, isnot_bitwise_or_type, &res)) + return res; int mark = p->mark; { // 'is' 'not' bitwise_or expr_ty a; @@ -5818,6 +6060,7 @@ isnot_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, isnot_bitwise_or_type, res); return res; } @@ -5829,6 +6072,8 @@ is_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; + if (_PyPegen_is_memoized(p, is_bitwise_or_type, &res)) + return res; int mark = p->mark; { // 'is' bitwise_or expr_ty a; @@ -5850,6 +6095,7 @@ is_bitwise_or_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, is_bitwise_or_type, res); return res; } @@ -6677,6 +6923,8 @@ power_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, power_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -6728,6 +6976,7 @@ power_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, power_type, res); return res; } @@ -6983,6 +7232,8 @@ slices_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, slices_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7038,6 +7289,7 @@ slices_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, slices_type, res); return res; } @@ -7049,6 +7301,8 @@ slice_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, slice_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7107,6 +7361,7 @@ slice_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, slice_type, res); return res; } @@ -7129,6 +7384,8 @@ atom_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, atom_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7321,6 +7578,7 @@ atom_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, atom_type, res); return res; } @@ -7364,6 +7622,8 @@ list_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, list_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7404,6 +7664,7 @@ list_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, list_type, res); return res; } @@ -7415,6 +7676,8 @@ listcomp_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, listcomp_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7469,6 +7732,7 @@ listcomp_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, listcomp_type, res); return res; } @@ -7480,6 +7744,8 @@ tuple_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, tuple_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7520,6 +7786,7 @@ tuple_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, tuple_type, res); return res; } @@ -7531,6 +7798,8 @@ group_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, group_type, &res)) + return res; int mark = p->mark; { // '(' (yield_expr | named_expression) ')' void *a; @@ -7555,6 +7824,7 @@ group_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, group_type, res); return res; } @@ -7566,6 +7836,8 @@ genexp_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, genexp_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7620,6 +7892,7 @@ genexp_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, genexp_type, res); return res; } @@ -7631,6 +7904,8 @@ set_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, set_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7671,6 +7946,7 @@ set_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, set_type, res); return res; } @@ -7682,6 +7958,8 @@ setcomp_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, setcomp_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7736,6 +8014,7 @@ setcomp_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, setcomp_type, res); return res; } @@ -7747,6 +8026,8 @@ dict_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, dict_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7787,6 +8068,7 @@ dict_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, dict_type, res); return res; } @@ -7798,6 +8080,8 @@ dictcomp_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, dictcomp_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7841,6 +8125,7 @@ dictcomp_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, dictcomp_type, res); return res; } @@ -7852,6 +8137,8 @@ kvpairs_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, kvpairs_type, &res)) + return res; int mark = p->mark; { // ','.kvpair+ ','? asdl_seq * a; @@ -7874,6 +8161,7 @@ kvpairs_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, kvpairs_type, res); return res; } @@ -7885,6 +8173,8 @@ kvpair_rule(Parser *p) return NULL; } KeyValuePair* res = NULL; + if (_PyPegen_is_memoized(p, kvpair_type, &res)) + return res; int mark = p->mark; { // '**' bitwise_or expr_ty a; @@ -7927,6 +8217,7 @@ kvpair_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, kvpair_type, res); return res; } @@ -7938,6 +8229,8 @@ for_if_clauses_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, for_if_clauses_type, &res)) + return res; int mark = p->mark; { // ((ASYNC? 'for' star_targets 'in' disjunction (('if' disjunction))*))+ asdl_seq * a; @@ -7956,6 +8249,7 @@ for_if_clauses_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, for_if_clauses_type, res); return res; } @@ -7967,6 +8261,8 @@ yield_expr_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, yield_expr_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8033,6 +8329,7 @@ yield_expr_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, yield_expr_type, res); return res; } @@ -8093,6 +8390,8 @@ args_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, args_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8179,6 +8478,7 @@ args_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, args_type, res); return res; } @@ -8193,6 +8493,8 @@ kwargs_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, kwargs_type, &res)) + return res; int mark = p->mark; { // ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+ asdl_seq * a; @@ -8239,6 +8541,7 @@ kwargs_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, kwargs_type, res); return res; } @@ -8250,6 +8553,8 @@ starred_expression_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, starred_expression_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8287,6 +8592,7 @@ starred_expression_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, starred_expression_type, res); return res; } @@ -8298,6 +8604,8 @@ kwarg_or_starred_rule(Parser *p) return NULL; } KeywordOrStarred* res = NULL; + if (_PyPegen_is_memoized(p, kwarg_or_starred_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8353,6 +8661,7 @@ kwarg_or_starred_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, kwarg_or_starred_type, res); return res; } @@ -8364,6 +8673,8 @@ kwarg_or_double_starred_rule(Parser *p) return NULL; } KeywordOrStarred* res = NULL; + if (_PyPegen_is_memoized(p, kwarg_or_double_starred_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8430,6 +8741,7 @@ kwarg_or_double_starred_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, kwarg_or_double_starred_type, res); return res; } @@ -8441,6 +8753,8 @@ star_targets_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, star_targets_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8499,6 +8813,7 @@ star_targets_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, star_targets_type, res); return res; } @@ -8510,6 +8825,8 @@ star_targets_seq_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, star_targets_seq_type, &res)) + return res; int mark = p->mark; { // ','.star_target+ ','? asdl_seq * a; @@ -8532,6 +8849,7 @@ star_targets_seq_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, star_targets_seq_type, res); return res; } @@ -8678,6 +8996,8 @@ star_atom_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, star_atom_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8783,6 +9103,7 @@ star_atom_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, star_atom_type, res); return res; } @@ -8797,6 +9118,8 @@ inside_paren_ann_assign_target_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, inside_paren_ann_assign_target_type, &res)) + return res; int mark = p->mark; { // ann_assign_subscript_attribute_target expr_ty ann_assign_subscript_attribute_target_var; @@ -8847,6 +9170,7 @@ inside_paren_ann_assign_target_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, inside_paren_ann_assign_target_type, res); return res; } @@ -8860,6 +9184,8 @@ ann_assign_subscript_attribute_target_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, ann_assign_subscript_attribute_target_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8936,6 +9262,7 @@ ann_assign_subscript_attribute_target_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, ann_assign_subscript_attribute_target_type, res); return res; } @@ -8947,6 +9274,8 @@ del_targets_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, del_targets_type, &res)) + return res; int mark = p->mark; { // ','.del_target+ ','? asdl_seq * a; @@ -8969,6 +9298,7 @@ del_targets_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, del_targets_type, res); return res; } @@ -9084,6 +9414,8 @@ del_t_atom_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, del_t_atom_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -9189,6 +9521,7 @@ del_t_atom_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, del_t_atom_type, res); return res; } @@ -9200,6 +9533,8 @@ targets_rule(Parser *p) return NULL; } asdl_seq* res = NULL; + if (_PyPegen_is_memoized(p, targets_type, &res)) + return res; int mark = p->mark; { // ','.target+ ','? asdl_seq * a; @@ -9222,6 +9557,7 @@ targets_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, targets_type, res); return res; } @@ -9533,6 +9869,8 @@ t_lookahead_rule(Parser *p) return NULL; } void * res = NULL; + if (_PyPegen_is_memoized(p, t_lookahead_type, &res)) + return res; int mark = p->mark; { // '(' void *literal; @@ -9569,6 +9907,7 @@ t_lookahead_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, t_lookahead_type, res); return res; } @@ -9580,6 +9919,8 @@ t_atom_rule(Parser *p) return NULL; } expr_ty res = NULL; + if (_PyPegen_is_memoized(p, t_atom_type, &res)) + return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -9685,6 +10026,7 @@ t_atom_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, t_atom_type, res); return res; } @@ -9699,6 +10041,8 @@ incorrect_arguments_rule(Parser *p) return NULL; } void * res = NULL; + if (_PyPegen_is_memoized(p, incorrect_arguments_type, &res)) + return res; int mark = p->mark; { // args ',' '*' expr_ty args_var; @@ -9769,6 +10113,7 @@ incorrect_arguments_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, incorrect_arguments_type, res); return res; } @@ -9780,6 +10125,8 @@ invalid_named_expression_rule(Parser *p) return NULL; } void * res = NULL; + if (_PyPegen_is_memoized(p, invalid_named_expression_type, &res)) + return res; int mark = p->mark; { // expression ':=' expression expr_ty a; @@ -9804,6 +10151,7 @@ invalid_named_expression_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, invalid_named_expression_type, res); return res; } @@ -9819,6 +10167,8 @@ invalid_assignment_rule(Parser *p) return NULL; } void * res = NULL; + if (_PyPegen_is_memoized(p, invalid_assignment_type, &res)) + return res; int mark = p->mark; { // list ':' expr_ty list_var; @@ -9904,6 +10254,7 @@ invalid_assignment_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, invalid_assignment_type, res); return res; } @@ -9915,6 +10266,8 @@ invalid_block_rule(Parser *p) return NULL; } void * res = NULL; + if (_PyPegen_is_memoized(p, invalid_block_type, &res)) + return res; int mark = p->mark; { // NEWLINE !INDENT void *newline_var; @@ -9935,6 +10288,7 @@ invalid_block_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, invalid_block_type, res); return res; } @@ -9946,6 +10300,8 @@ invalid_comprehension_rule(Parser *p) return NULL; } void * res = NULL; + if (_PyPegen_is_memoized(p, invalid_comprehension_type, &res)) + return res; int mark = p->mark; { // ('[' | '(' | '{') '*' expression for_if_clauses void *_tmp_121_var; @@ -9973,6 +10329,7 @@ invalid_comprehension_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, invalid_comprehension_type, res); return res; } @@ -9985,6 +10342,8 @@ invalid_parameters_rule(Parser *p) return NULL; } void * res = NULL; + if (_PyPegen_is_memoized(p, invalid_parameters_type, &res)) + return res; int mark = p->mark; { // [plain_names ','] (slash_with_default | names_with_default) ',' plain_names void *_tmp_123_var; @@ -10013,6 +10372,7 @@ invalid_parameters_rule(Parser *p) } res = NULL; done: + _PyPegen_insert_memo(p, mark, invalid_parameters_type, res); return res; } diff --git a/Tools/peg_generator/pegen/__main__.py b/Tools/peg_generator/pegen/__main__.py index 6696d135a8b695..4a9283eda6f4ed 100755 --- a/Tools/peg_generator/pegen/__main__.py +++ b/Tools/peg_generator/pegen/__main__.py @@ -131,7 +131,7 @@ def main() -> None: if __name__ == "__main__": - if sys.version_info < (3, 8): - print("ERROR: using pegen requires at least Python 3.8!", file=sys.stderr) + if sys.version_info < (3, 7): + print("ERROR: using pegen requires at least Python 3.7!", file=sys.stderr) sys.exit(1) main() diff --git a/Tools/peg_generator/pegen/grammar_parser.py b/Tools/peg_generator/pegen/grammar_parser.py index 0e206ee9cd5e44..56b032273c10d3 100644 --- a/Tools/peg_generator/pegen/grammar_parser.py +++ b/Tools/peg_generator/pegen/grammar_parser.py @@ -44,12 +44,11 @@ def start(self) -> Optional[Grammar]: # start: grammar $ mark = self.mark() cut = False - if ( - (grammar := self.grammar()) - and - (endmarker := self.expect('ENDMARKER')) - ): - return grammar + grammar = self.grammar() + if grammar: + endmarker = self.expect('ENDMARKER') + if endmarker: + return grammar self.reset(mark) if cut: return None return None @@ -59,18 +58,16 @@ def grammar(self) -> Optional[Grammar]: # grammar: metas rules | rules mark = self.mark() cut = False - if ( - (metas := self.metas()) - and - (rules := self.rules()) - ): - return Grammar ( rules , metas ) + metas = self.metas() + if metas: + rules = self.rules() + if rules: + return Grammar ( rules , metas ) self.reset(mark) if cut: return None cut = False - if ( - (rules := self.rules()) - ): + rules = self.rules() + if rules: return Grammar ( rules , [ ] ) self.reset(mark) if cut: return None @@ -81,18 +78,16 @@ def metas(self) -> Optional[MetaList]: # metas: meta metas | meta mark = self.mark() cut = False - if ( - (meta := self.meta()) - and - (metas := self.metas()) - ): - return [ meta ] + metas + meta = self.meta() + if meta: + metas = self.metas() + if metas: + return [ meta ] + metas self.reset(mark) if cut: return None cut = False - if ( - (meta := self.meta()) - ): + meta = self.meta() + if meta: return [ meta ] self.reset(mark) if cut: return None @@ -103,40 +98,37 @@ def meta(self) -> Optional[MetaTuple]: # meta: "@" NAME NEWLINE | "@" NAME NAME NEWLINE | "@" NAME STRING NEWLINE mark = self.mark() cut = False - if ( - (literal := self.expect("@")) - and - (name := self.name()) - and - (newline := self.expect('NEWLINE')) - ): - return ( name . string , None ) + literal = self.expect("@") + if literal: + name = self.name() + if name: + newline = self.expect('NEWLINE') + if newline: + return ( name . string , None ) self.reset(mark) if cut: return None cut = False - if ( - (literal := self.expect("@")) - and - (a := self.name()) - and - (b := self.name()) - and - (newline := self.expect('NEWLINE')) - ): - return ( a . string , b . string ) + literal = self.expect("@") + if literal: + a = self.name() + if a: + b = self.name() + if b: + newline = self.expect('NEWLINE') + if newline: + return ( a . string , b . string ) self.reset(mark) if cut: return None cut = False - if ( - (literal := self.expect("@")) - and - (name := self.name()) - and - (string := self.string()) - and - (newline := self.expect('NEWLINE')) - ): - return ( name . string , literal_eval ( string . string ) ) + literal = self.expect("@") + if literal: + name = self.name() + if name: + string = self.string() + if string: + newline = self.expect('NEWLINE') + if newline: + return ( name . string , literal_eval ( string . string ) ) self.reset(mark) if cut: return None return None @@ -146,18 +138,16 @@ def rules(self) -> Optional[RuleList]: # rules: rule rules | rule mark = self.mark() cut = False - if ( - (rule := self.rule()) - and - (rules := self.rules()) - ): - return [ rule ] + rules + rule = self.rule() + if rule: + rules = self.rules() + if rules: + return [ rule ] + rules self.reset(mark) if cut: return None cut = False - if ( - (rule := self.rule()) - ): + rule = self.rule() + if rule: return [ rule ] self.reset(mark) if cut: return None @@ -168,58 +158,55 @@ def rule(self) -> Optional[Rule]: # rule: rulename memoflag? ":" alts NEWLINE INDENT more_alts DEDENT | rulename memoflag? ":" NEWLINE INDENT more_alts DEDENT | rulename memoflag? ":" alts NEWLINE mark = self.mark() cut = False - if ( - (rulename := self.rulename()) - and - (opt := self.memoflag(),) - and - (literal := self.expect(":")) - and - (alts := self.alts()) - and - (newline := self.expect('NEWLINE')) - and - (indent := self.expect('INDENT')) - and - (more_alts := self.more_alts()) - and - (dedent := self.expect('DEDENT')) - ): - return Rule ( rulename [ 0 ] , rulename [ 1 ] , Rhs ( alts . alts + more_alts . alts ) , memo = opt ) - self.reset(mark) - if cut: return None - cut = False - if ( - (rulename := self.rulename()) - and - (opt := self.memoflag(),) - and - (literal := self.expect(":")) - and - (newline := self.expect('NEWLINE')) - and - (indent := self.expect('INDENT')) - and - (more_alts := self.more_alts()) - and - (dedent := self.expect('DEDENT')) - ): - return Rule ( rulename [ 0 ] , rulename [ 1 ] , more_alts , memo = opt ) - self.reset(mark) - if cut: return None - cut = False - if ( - (rulename := self.rulename()) - and - (opt := self.memoflag(),) - and - (literal := self.expect(":")) - and - (alts := self.alts()) - and - (newline := self.expect('NEWLINE')) - ): - return Rule ( rulename [ 0 ] , rulename [ 1 ] , alts , memo = opt ) + rulename = self.rulename() + if rulename: + opt = self.memoflag(), + if opt: + literal = self.expect(":") + if literal: + alts = self.alts() + if alts: + newline = self.expect('NEWLINE') + if newline: + indent = self.expect('INDENT') + if indent: + more_alts = self.more_alts() + if more_alts: + dedent = self.expect('DEDENT') + if dedent: + return Rule ( rulename [ 0 ] , rulename [ 1 ] , Rhs ( alts . alts + more_alts . alts ) , memo = opt ) + self.reset(mark) + if cut: return None + cut = False + rulename = self.rulename() + if rulename: + opt = self.memoflag(), + if opt: + literal = self.expect(":") + if literal: + newline = self.expect('NEWLINE') + if newline: + indent = self.expect('INDENT') + if indent: + more_alts = self.more_alts() + if more_alts: + dedent = self.expect('DEDENT') + if dedent: + return Rule ( rulename [ 0 ] , rulename [ 1 ] , more_alts , memo = opt ) + self.reset(mark) + if cut: return None + cut = False + rulename = self.rulename() + if rulename: + opt = self.memoflag(), + if opt: + literal = self.expect(":") + if literal: + alts = self.alts() + if alts: + newline = self.expect('NEWLINE') + if newline: + return Rule ( rulename [ 0 ] , rulename [ 1 ] , alts , memo = opt ) self.reset(mark) if cut: return None return None @@ -229,37 +216,34 @@ def rulename(self) -> Optional[RuleName]: # rulename: NAME '[' NAME '*' ']' | NAME '[' NAME ']' | NAME mark = self.mark() cut = False - if ( - (name := self.name()) - and - (literal := self.expect('[')) - and - (type := self.name()) - and - (literal_1 := self.expect('*')) - and - (literal_2 := self.expect(']')) - ): - return ( name . string , type . string + "*" ) - self.reset(mark) - if cut: return None - cut = False - if ( - (name := self.name()) - and - (literal := self.expect('[')) - and - (type := self.name()) - and - (literal_1 := self.expect(']')) - ): - return ( name . string , type . string ) - self.reset(mark) - if cut: return None - cut = False - if ( - (name := self.name()) - ): + name = self.name() + if name: + literal = self.expect('[') + if literal: + type = self.name() + if type: + literal_1 = self.expect('*') + if literal_1: + literal_2 = self.expect(']') + if literal_2: + return ( name . string , type . string + "*" ) + self.reset(mark) + if cut: return None + cut = False + name = self.name() + if name: + literal = self.expect('[') + if literal: + type = self.name() + if type: + literal_1 = self.expect(']') + if literal_1: + return ( name . string , type . string ) + self.reset(mark) + if cut: return None + cut = False + name = self.name() + if name: return ( name . string , None ) self.reset(mark) if cut: return None @@ -270,14 +254,13 @@ def memoflag(self) -> Optional[str]: # memoflag: '(' 'memo' ')' mark = self.mark() cut = False - if ( - (literal := self.expect('(')) - and - (literal_1 := self.expect('memo')) - and - (literal_2 := self.expect(')')) - ): - return "memo" + literal = self.expect('(') + if literal: + literal_1 = self.expect('memo') + if literal_1: + literal_2 = self.expect(')') + if literal_2: + return "memo" self.reset(mark) if cut: return None return None @@ -287,20 +270,18 @@ def alts(self) -> Optional[Rhs]: # alts: alt "|" alts | alt mark = self.mark() cut = False - if ( - (alt := self.alt()) - and - (literal := self.expect("|")) - and - (alts := self.alts()) - ): - return Rhs ( [ alt ] + alts . alts ) + alt = self.alt() + if alt: + literal = self.expect("|") + if literal: + alts = self.alts() + if alts: + return Rhs ( [ alt ] + alts . alts ) self.reset(mark) if cut: return None cut = False - if ( - (alt := self.alt()) - ): + alt = self.alt() + if alt: return Rhs ( [ alt ] ) self.reset(mark) if cut: return None @@ -311,27 +292,25 @@ def more_alts(self) -> Optional[Rhs]: # more_alts: "|" alts NEWLINE more_alts | "|" alts NEWLINE mark = self.mark() cut = False - if ( - (literal := self.expect("|")) - and - (alts := self.alts()) - and - (newline := self.expect('NEWLINE')) - and - (more_alts := self.more_alts()) - ): - return Rhs ( alts . alts + more_alts . alts ) + literal = self.expect("|") + if literal: + alts = self.alts() + if alts: + newline = self.expect('NEWLINE') + if newline: + more_alts = self.more_alts() + if more_alts: + return Rhs ( alts . alts + more_alts . alts ) self.reset(mark) if cut: return None cut = False - if ( - (literal := self.expect("|")) - and - (alts := self.alts()) - and - (newline := self.expect('NEWLINE')) - ): - return Rhs ( alts . alts ) + literal = self.expect("|") + if literal: + alts = self.alts() + if alts: + newline = self.expect('NEWLINE') + if newline: + return Rhs ( alts . alts ) self.reset(mark) if cut: return None return None @@ -341,38 +320,34 @@ def alt(self) -> Optional[Alt]: # alt: items '$' action | items '$' | items action | items mark = self.mark() cut = False - if ( - (items := self.items()) - and - (literal := self.expect('$')) - and - (action := self.action()) - ): - return Alt ( items + [ NamedItem ( None , NameLeaf ( 'ENDMARKER' ) ) ] , action = action ) + items = self.items() + if items: + literal = self.expect('$') + if literal: + action = self.action() + if action: + return Alt ( items + [ NamedItem ( None , NameLeaf ( 'ENDMARKER' ) ) ] , action = action ) self.reset(mark) if cut: return None cut = False - if ( - (items := self.items()) - and - (literal := self.expect('$')) - ): - return Alt ( items + [ NamedItem ( None , NameLeaf ( 'ENDMARKER' ) ) ] , action = None ) + items = self.items() + if items: + literal = self.expect('$') + if literal: + return Alt ( items + [ NamedItem ( None , NameLeaf ( 'ENDMARKER' ) ) ] , action = None ) self.reset(mark) if cut: return None cut = False - if ( - (items := self.items()) - and - (action := self.action()) - ): - return Alt ( items , action = action ) + items = self.items() + if items: + action = self.action() + if action: + return Alt ( items , action = action ) self.reset(mark) if cut: return None cut = False - if ( - (items := self.items()) - ): + items = self.items() + if items: return Alt ( items , action = None ) self.reset(mark) if cut: return None @@ -383,18 +358,16 @@ def items(self) -> Optional[NamedItemList]: # items: named_item items | named_item mark = self.mark() cut = False - if ( - (named_item := self.named_item()) - and - (items := self.items()) - ): - return [ named_item ] + items + named_item = self.named_item() + if named_item: + items = self.items() + if items: + return [ named_item ] + items self.reset(mark) if cut: return None cut = False - if ( - (named_item := self.named_item()) - ): + named_item = self.named_item() + if named_item: return [ named_item ] self.reset(mark) if cut: return None @@ -405,29 +378,26 @@ def named_item(self) -> Optional[NamedItem]: # named_item: NAME '=' ~ item | item | lookahead mark = self.mark() cut = False - if ( - (name := self.name()) - and - (literal := self.expect('=')) - and - (cut := True) - and - (item := self.item()) - ): - return NamedItem ( name . string , item ) + name = self.name() + if name: + literal = self.expect('=') + if literal: + cut = True + if cut: + item = self.item() + if item: + return NamedItem ( name . string , item ) self.reset(mark) if cut: return None cut = False - if ( - (item := self.item()) - ): + item = self.item() + if item: return NamedItem ( None , item ) self.reset(mark) if cut: return None cut = False - if ( - (it := self.lookahead()) - ): + it = self.lookahead() + if it: return NamedItem ( None , it ) self.reset(mark) if cut: return None @@ -438,31 +408,28 @@ def lookahead(self) -> Optional[LookaheadOrCut]: # lookahead: '&' ~ atom | '!' ~ atom | '~' mark = self.mark() cut = False - if ( - (literal := self.expect('&')) - and - (cut := True) - and - (atom := self.atom()) - ): - return PositiveLookahead ( atom ) + literal = self.expect('&') + if literal: + cut = True + if cut: + atom = self.atom() + if atom: + return PositiveLookahead ( atom ) self.reset(mark) if cut: return None cut = False - if ( - (literal := self.expect('!')) - and - (cut := True) - and - (atom := self.atom()) - ): - return NegativeLookahead ( atom ) + literal = self.expect('!') + if literal: + cut = True + if cut: + atom = self.atom() + if atom: + return NegativeLookahead ( atom ) self.reset(mark) if cut: return None cut = False - if ( - (literal := self.expect('~')) - ): + literal = self.expect('~') + if literal: return Cut ( ) self.reset(mark) if cut: return None @@ -473,62 +440,56 @@ def item(self) -> Optional[Item]: # item: '[' ~ alts ']' | atom '?' | atom '*' | atom '+' | atom '.' atom '+' | atom mark = self.mark() cut = False - if ( - (literal := self.expect('[')) - and - (cut := True) - and - (alts := self.alts()) - and - (literal_1 := self.expect(']')) - ): - return Opt ( alts ) + literal = self.expect('[') + if literal: + cut = True + if cut: + alts = self.alts() + if alts: + literal_1 = self.expect(']') + if literal_1: + return Opt ( alts ) self.reset(mark) if cut: return None cut = False - if ( - (atom := self.atom()) - and - (literal := self.expect('?')) - ): - return Opt ( atom ) + atom = self.atom() + if atom: + literal = self.expect('?') + if literal: + return Opt ( atom ) self.reset(mark) if cut: return None cut = False - if ( - (atom := self.atom()) - and - (literal := self.expect('*')) - ): - return Repeat0 ( atom ) + atom = self.atom() + if atom: + literal = self.expect('*') + if literal: + return Repeat0 ( atom ) self.reset(mark) if cut: return None cut = False - if ( - (atom := self.atom()) - and - (literal := self.expect('+')) - ): - return Repeat1 ( atom ) + atom = self.atom() + if atom: + literal = self.expect('+') + if literal: + return Repeat1 ( atom ) self.reset(mark) if cut: return None cut = False - if ( - (sep := self.atom()) - and - (literal := self.expect('.')) - and - (node := self.atom()) - and - (literal_1 := self.expect('+')) - ): - return Gather ( sep , node ) + sep = self.atom() + if sep: + literal = self.expect('.') + if literal: + node = self.atom() + if node: + literal_1 = self.expect('+') + if literal_1: + return Gather ( sep , node ) self.reset(mark) if cut: return None cut = False - if ( - (atom := self.atom()) - ): + atom = self.atom() + if atom: return atom self.reset(mark) if cut: return None @@ -539,29 +500,26 @@ def atom(self) -> Optional[Plain]: # atom: '(' ~ alts ')' | NAME | STRING mark = self.mark() cut = False - if ( - (literal := self.expect('(')) - and - (cut := True) - and - (alts := self.alts()) - and - (literal_1 := self.expect(')')) - ): - return Group ( alts ) + literal = self.expect('(') + if literal: + cut = True + if cut: + alts = self.alts() + if alts: + literal_1 = self.expect(')') + if literal_1: + return Group ( alts ) self.reset(mark) if cut: return None cut = False - if ( - (name := self.name()) - ): + name = self.name() + if name: return NameLeaf ( name . string ) self.reset(mark) if cut: return None cut = False - if ( - (string := self.string()) - ): + string = self.string() + if string: return StringLeaf ( string . string ) self.reset(mark) if cut: return None @@ -572,16 +530,15 @@ def action(self) -> Optional[str]: # action: "{" ~ target_atoms "}" mark = self.mark() cut = False - if ( - (literal := self.expect("{")) - and - (cut := True) - and - (target_atoms := self.target_atoms()) - and - (literal_1 := self.expect("}")) - ): - return target_atoms + literal = self.expect("{") + if literal: + cut = True + if cut: + target_atoms = self.target_atoms() + if target_atoms: + literal_1 = self.expect("}") + if literal_1: + return target_atoms self.reset(mark) if cut: return None return None @@ -591,18 +548,16 @@ def target_atoms(self) -> Optional[str]: # target_atoms: target_atom target_atoms | target_atom mark = self.mark() cut = False - if ( - (target_atom := self.target_atom()) - and - (target_atoms := self.target_atoms()) - ): - return target_atom + " " + target_atoms + target_atom = self.target_atom() + if target_atom: + target_atoms = self.target_atoms() + if target_atoms: + return target_atom + " " + target_atoms self.reset(mark) if cut: return None cut = False - if ( - (target_atom := self.target_atom()) - ): + target_atom = self.target_atom() + if target_atom: return target_atom self.reset(mark) if cut: return None @@ -613,60 +568,52 @@ def target_atom(self) -> Optional[str]: # target_atom: "{" ~ target_atoms "}" | NAME | NUMBER | STRING | "?" | ":" | !"}" OP mark = self.mark() cut = False - if ( - (literal := self.expect("{")) - and - (cut := True) - and - (target_atoms := self.target_atoms()) - and - (literal_1 := self.expect("}")) - ): - return "{" + target_atoms + "}" + literal = self.expect("{") + if literal: + cut = True + if cut: + target_atoms = self.target_atoms() + if target_atoms: + literal_1 = self.expect("}") + if literal_1: + return "{" + target_atoms + "}" self.reset(mark) if cut: return None cut = False - if ( - (name := self.name()) - ): + name = self.name() + if name: return name . string self.reset(mark) if cut: return None cut = False - if ( - (number := self.number()) - ): + number = self.number() + if number: return number . string self.reset(mark) if cut: return None cut = False - if ( - (string := self.string()) - ): + string = self.string() + if string: return string . string self.reset(mark) if cut: return None cut = False - if ( - (literal := self.expect("?")) - ): + literal = self.expect("?") + if literal: return "?" self.reset(mark) if cut: return None cut = False - if ( - (literal := self.expect(":")) - ): + literal = self.expect(":") + if literal: return ":" self.reset(mark) if cut: return None cut = False - if ( - self.negative_lookahead(self.expect, "}") - and - (op := self.op()) - ): - return op . string + if self.negative_lookahead(self.expect, "}"): + op = self.op() + if op: + return op . string self.reset(mark) if cut: return None return None diff --git a/Tools/peg_generator/pegen/python_generator.py b/Tools/peg_generator/pegen/python_generator.py index b2891885f957e5..fecbbf1b879033 100644 --- a/Tools/peg_generator/pegen/python_generator.py +++ b/Tools/peg_generator/pegen/python_generator.py @@ -178,11 +178,12 @@ def visit_NamedItem(self, node: NamedItem, names: List[str]) -> None: if node.name: name = node.name if not name: - self.print(call) + self.print(f"if {call}:") else: if name != "cut": name = dedupe(name, names) - self.print(f"({name} := {call})") + self.print(f"{name} = {call}") + self.print(f"if {name}:") def visit_Rhs(self, node: Rhs, is_loop: bool = False, is_gather: bool = False) -> None: if is_loop: @@ -194,31 +195,28 @@ def visit_Alt(self, node: Alt, is_loop: bool, is_gather: bool) -> None: names: List[str] = [] self.print("cut = False") # TODO: Only if needed. if is_loop: - self.print("while (") - else: - self.print("if (") - with self.indent(): - first = True - for item in node.items: - if first: - first = False - else: - self.print("and") - self.visit(item, names=names) - self.print("):") - with self.indent(): - action = node.action - if not action: - if is_gather: - assert len(names) == 2 - action = f"[{names[0]}] + {names[1]}" - else: - action = f"[{', '.join(names)}]" - if is_loop: - self.print(f"children.append({action})") - self.print(f"mark = self.mark()") + self.print("while True:") + self.level += 1 + for item in node.items: + self.visit(item, names=names) + self.level += 1 + action = node.action + if not action: + if is_gather: + assert len(names) == 2 + action = f"[{names[0]}] + {names[1]}" else: - self.print(f"return {action}") + action = f"[{', '.join(names)}]" + if is_loop: + self.print(f"children.append({action})") + self.print("mark = self.mark()") + self.print("continue") + else: + self.print(f"return {action}") + self.level -= len(node.items) + if is_loop: + self.print("break") + self.level -= 1 self.print("self.reset(mark)") # Skip remaining alternatives if a cut was reached. self.print("if cut: return None") # TODO: Only if needed. diff --git a/Tools/peg_generator/pegen/testutil.py b/Tools/peg_generator/pegen/testutil.py index 5a91862be1273f..2a9dea18eccdce 100644 --- a/Tools/peg_generator/pegen/testutil.py +++ b/Tools/peg_generator/pegen/testutil.py @@ -6,7 +6,7 @@ import textwrap import tokenize -from typing import Any, cast, Dict, IO, Type, Final +from typing import Any, cast, Dict, IO, Type from pegen.build import compile_c_extension from pegen.c_generator import CParserGenerator @@ -96,7 +96,7 @@ def generate_parser_c_extension( def print_memstats() -> bool: - MiB: Final = 2 ** 20 + MiB = 2 ** 20 try: import psutil # type: ignore except ImportError: diff --git a/Tools/peg_generator/pegen/tokenizer.py b/Tools/peg_generator/pegen/tokenizer.py index 61a28efc84b62b..b6e61ff1bdaea1 100644 --- a/Tools/peg_generator/pegen/tokenizer.py +++ b/Tools/peg_generator/pegen/tokenizer.py @@ -4,7 +4,7 @@ Mark = int # NewType('Mark', int) -exact_token_types = token.EXACT_TOKEN_TYPES # type: ignore +exact_token_types = tokenize.EXACT_TOKEN_TYPES # type: ignore def shorttok(tok: tokenize.TokenInfo) -> str: diff --git a/Tools/peg_generator/scripts/grammar_grapher.py b/Tools/peg_generator/scripts/grammar_grapher.py index 3aa25466c70d47..f9c8d15f385566 100755 --- a/Tools/peg_generator/scripts/grammar_grapher.py +++ b/Tools/peg_generator/scripts/grammar_grapher.py @@ -92,10 +92,10 @@ def main() -> None: # Flatten the start node if has only a single reference root_node = "start" - if start := references["start"]: - if len(start) == 1: - root_node = list(start)[0] - del references["start"] + start = references["start"] + if start and len(start) == 1: + root_node = list(start)[0] + del references["start"] print("digraph g1 {") print('\toverlap="scale";') # Force twopi to scale the graph to avoid overlaps From 3d09d69592c1a5739758a4f87ca8860c601694c2 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 29 Apr 2020 10:16:13 +0300 Subject: [PATCH 2/5] Fix testutil.py. --- Tools/peg_generator/pegen/testutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/peg_generator/pegen/testutil.py b/Tools/peg_generator/pegen/testutil.py index dbf6afe2ded2d9..6b98590d72a750 100644 --- a/Tools/peg_generator/pegen/testutil.py +++ b/Tools/peg_generator/pegen/testutil.py @@ -17,7 +17,7 @@ from pegen.python_generator import PythonParserGenerator from pegen.tokenizer import Tokenizer -EXACT_TOKENS = token.EXACT_TOKEN_TYPES # type: ignore +EXACT_TOKENS = tokenize.EXACT_TOKEN_TYPES # type: ignore NON_EXACT_TOKENS = { name for index, name in token.tok_name.items() if index not in EXACT_TOKENS.values() } From d8d163c9da3ddf291e0d5977d644999b66db2de7 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 27 Apr 2020 23:03:25 +0300 Subject: [PATCH 3/5] Support Python 3.6 in the PEG generator --- Tools/peg_generator/pegen/__main__.py | 4 +-- Tools/peg_generator/pegen/grammar.py | 52 +++++++++++++-------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Tools/peg_generator/pegen/__main__.py b/Tools/peg_generator/pegen/__main__.py index c9ea2a393c2ec4..92d396865b643f 100755 --- a/Tools/peg_generator/pegen/__main__.py +++ b/Tools/peg_generator/pegen/__main__.py @@ -176,7 +176,7 @@ def main() -> None: if __name__ == "__main__": - if sys.version_info < (3, 7): - print("ERROR: using pegen requires at least Python 3.7!", file=sys.stderr) + if sys.version_info < (3, 6): + print("ERROR: using pegen requires at least Python 3.6!", file=sys.stderr) sys.exit(1) main() diff --git a/Tools/peg_generator/pegen/grammar.py b/Tools/peg_generator/pegen/grammar.py index 67039d5a032abd..5d5f1c3b3d02af 100644 --- a/Tools/peg_generator/pegen/grammar.py +++ b/Tools/peg_generator/pegen/grammar.py @@ -1,4 +1,4 @@ -from __future__ import annotations +#from __future__ import annotations from abc import abstractmethod from typing import ( @@ -45,7 +45,7 @@ def generic_visit(self, node: Iterable[Any], *args: Any, **kwargs: Any) -> None: class Grammar: - def __init__(self, rules: Iterable[Rule], metas: Iterable[Tuple[str, Optional[str]]]): + def __init__(self, rules: Iterable['Rule'], metas: Iterable[Tuple[str, Optional[str]]]): self.rules = {rule.name: rule for rule in rules} self.metas = dict(metas) @@ -62,7 +62,7 @@ def __repr__(self) -> str: lines.append(")") return "\n".join(lines) - def __iter__(self) -> Iterator[Rule]: + def __iter__(self) -> Iterator['Rule']: yield from self.rules.values() @@ -71,7 +71,7 @@ def __iter__(self) -> Iterator[Rule]: class Rule: - def __init__(self, name: str, type: Optional[str], rhs: Rhs, memo: Optional[object] = None): + def __init__(self, name: str, type: Optional[str], rhs: 'Rhs', memo: Optional[object] = None): self.name = name self.type = type self.rhs = rhs @@ -101,10 +101,10 @@ def __str__(self) -> str: def __repr__(self) -> str: return f"Rule({self.name!r}, {self.type!r}, {self.rhs!r})" - def __iter__(self) -> Iterator[Rhs]: + def __iter__(self) -> Iterator['Rhs']: yield self.rhs - def nullable_visit(self, rules: Dict[str, Rule]) -> bool: + def nullable_visit(self, rules: Dict[str, 'Rule']) -> bool: if self.visited: # A left-recursive rule is considered non-nullable. return False @@ -115,7 +115,7 @@ def nullable_visit(self, rules: Dict[str, Rule]) -> bool: def initial_names(self) -> AbstractSet[str]: return self.rhs.initial_names() - def flatten(self) -> Rhs: + def flatten(self) -> 'Rhs': # If it's a single parenthesized group, flatten it. rhs = self.rhs if ( @@ -127,7 +127,7 @@ def flatten(self) -> Rhs: rhs = rhs.alts[0].items[0].item.rhs return rhs - def collect_todo(self, gen: ParserGenerator) -> None: + def collect_todo(self, gen: 'ParserGenerator') -> None: rhs = self.flatten() rhs.collect_todo(gen) @@ -188,7 +188,7 @@ def initial_names(self) -> AbstractSet[str]: class Rhs: - def __init__(self, alts: List[Alt]): + def __init__(self, alts: List['Alt']): self.alts = alts self.memo: Optional[Tuple[Optional[str], str]] = None @@ -198,7 +198,7 @@ def __str__(self) -> str: def __repr__(self) -> str: return f"Rhs({self.alts!r})" - def __iter__(self) -> Iterator[List[Alt]]: + def __iter__(self) -> Iterator[List['Alt']]: yield self.alts def nullable_visit(self, rules: Dict[str, Rule]) -> bool: @@ -213,13 +213,13 @@ def initial_names(self) -> AbstractSet[str]: names |= alt.initial_names() return names - def collect_todo(self, gen: ParserGenerator) -> None: + def collect_todo(self, gen: 'ParserGenerator') -> None: for alt in self.alts: alt.collect_todo(gen) class Alt: - def __init__(self, items: List[NamedItem], *, icut: int = -1, action: Optional[str] = None): + def __init__(self, items: List['NamedItem'], *, icut: int = -1, action: Optional[str] = None): self.items = items self.icut = icut self.action = action @@ -239,7 +239,7 @@ def __repr__(self) -> str: args.append(f"action={self.action!r}") return f"Alt({', '.join(args)})" - def __iter__(self) -> Iterator[List[NamedItem]]: + def __iter__(self) -> Iterator[List['NamedItem']]: yield self.items def nullable_visit(self, rules: Dict[str, Rule]) -> bool: @@ -256,13 +256,13 @@ def initial_names(self) -> AbstractSet[str]: break return names - def collect_todo(self, gen: ParserGenerator) -> None: + def collect_todo(self, gen: 'ParserGenerator') -> None: for item in self.items: item.collect_todo(gen) class NamedItem: - def __init__(self, name: Optional[str], item: Item): + def __init__(self, name: Optional[str], item: 'Item'): self.name = name self.item = item self.nullable = False @@ -276,7 +276,7 @@ def __str__(self) -> str: def __repr__(self) -> str: return f"NamedItem({self.name!r}, {self.item!r})" - def __iter__(self) -> Iterator[Item]: + def __iter__(self) -> Iterator['Item']: yield self.item def nullable_visit(self, rules: Dict[str, Rule]) -> bool: @@ -286,19 +286,19 @@ def nullable_visit(self, rules: Dict[str, Rule]) -> bool: def initial_names(self) -> AbstractSet[str]: return self.item.initial_names() - def collect_todo(self, gen: ParserGenerator) -> None: + def collect_todo(self, gen: 'ParserGenerator') -> None: gen.callmakervisitor.visit(self.item) class Lookahead: - def __init__(self, node: Plain, sign: str): + def __init__(self, node: 'Plain', sign: str): self.node = node self.sign = sign def __str__(self) -> str: return f"{self.sign}{self.node}" - def __iter__(self) -> Iterator[Plain]: + def __iter__(self) -> Iterator['Plain']: yield self.node def nullable_visit(self, rules: Dict[str, Rule]) -> bool: @@ -309,7 +309,7 @@ def initial_names(self) -> AbstractSet[str]: class PositiveLookahead(Lookahead): - def __init__(self, node: Plain): + def __init__(self, node: 'Plain'): super().__init__(node, "&") def __repr__(self) -> str: @@ -317,7 +317,7 @@ def __repr__(self) -> str: class NegativeLookahead(Lookahead): - def __init__(self, node: Plain): + def __init__(self, node: 'Plain'): super().__init__(node, "!") def __repr__(self) -> str: @@ -325,7 +325,7 @@ def __repr__(self) -> str: class Opt: - def __init__(self, node: Item): + def __init__(self, node: 'Item'): self.node = node def __str__(self) -> str: @@ -339,7 +339,7 @@ def __str__(self) -> str: def __repr__(self) -> str: return f"Opt({self.node!r})" - def __iter__(self) -> Iterator[Item]: + def __iter__(self) -> Iterator['Item']: yield self.node def nullable_visit(self, rules: Dict[str, Rule]) -> bool: @@ -352,7 +352,7 @@ def initial_names(self) -> AbstractSet[str]: class Repeat: """Shared base class for x* and x+.""" - def __init__(self, node: Plain): + def __init__(self, node: 'Plain'): self.node = node self.memo: Optional[Tuple[Optional[str], str]] = None @@ -360,7 +360,7 @@ def __init__(self, node: Plain): def nullable_visit(self, rules: Dict[str, Rule]) -> bool: raise NotImplementedError - def __iter__(self) -> Iterator[Plain]: + def __iter__(self) -> Iterator['Plain']: yield self.node def initial_names(self) -> AbstractSet[str]: @@ -400,7 +400,7 @@ def nullable_visit(self, rules: Dict[str, Rule]) -> bool: class Gather(Repeat): - def __init__(self, separator: Plain, node: Plain): + def __init__(self, separator: 'Plain', node: 'Plain'): self.separator = separator self.node = node From 824bd213886a37d14b0fafbe178095eb947dd417 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 29 Apr 2020 14:36:08 +0300 Subject: [PATCH 4/5] Fix handling of optional items. --- Parser/pegen/parse.c | 360 ------------------ Tools/peg_generator/pegen/grammar_parser.py | 130 +++---- Tools/peg_generator/pegen/python_generator.py | 71 ++-- 3 files changed, 98 insertions(+), 463 deletions(-) diff --git a/Parser/pegen/parse.c b/Parser/pegen/parse.c index 77883bdcb39eba..76dd6d31da05a4 100644 --- a/Parser/pegen/parse.c +++ b/Parser/pegen/parse.c @@ -641,8 +641,6 @@ file_rule(Parser *p) return NULL; } mod_ty res = NULL; - if (_PyPegen_is_memoized(p, file_type, &res)) - return res; int mark = p->mark; { // statements? $ void *a; @@ -664,7 +662,6 @@ file_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, file_type, res); return res; } @@ -676,8 +673,6 @@ interactive_rule(Parser *p) return NULL; } mod_ty res = NULL; - if (_PyPegen_is_memoized(p, interactive_type, &res)) - return res; int mark = p->mark; { // statement_newline asdl_seq* a; @@ -696,7 +691,6 @@ interactive_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, interactive_type, res); return res; } @@ -708,8 +702,6 @@ eval_rule(Parser *p) return NULL; } mod_ty res = NULL; - if (_PyPegen_is_memoized(p, eval_type, &res)) - return res; int mark = p->mark; { // expressions NEWLINE* $ asdl_seq * _loop0_1_var; @@ -734,7 +726,6 @@ eval_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, eval_type, res); return res; } @@ -746,8 +737,6 @@ fstring_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, fstring_type, &res)) - return res; int mark = p->mark; { // star_expressions expr_ty star_expressions_var; @@ -762,7 +751,6 @@ fstring_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, fstring_type, res); return res; } @@ -774,8 +762,6 @@ statements_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, statements_type, &res)) - return res; int mark = p->mark; { // statement+ asdl_seq * a; @@ -794,7 +780,6 @@ statements_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, statements_type, res); return res; } @@ -806,8 +791,6 @@ statement_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, statement_type, &res)) - return res; int mark = p->mark; { // compound_stmt stmt_ty a; @@ -837,7 +820,6 @@ statement_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, statement_type, res); return res; } @@ -849,8 +831,6 @@ statement_newline_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, statement_newline_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -929,7 +909,6 @@ statement_newline_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, statement_newline_type, res); return res; } @@ -941,8 +920,6 @@ simple_stmt_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, simple_stmt_type, &res)) - return res; int mark = p->mark; { // small_stmt !';' NEWLINE stmt_ty a; @@ -988,7 +965,6 @@ simple_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, simple_stmt_type, res); return res; } @@ -1252,8 +1228,6 @@ compound_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, compound_stmt_type, &res)) - return res; int mark = p->mark; { // &('def' | '@' | ASYNC) function_def stmt_ty function_def_var; @@ -1348,7 +1322,6 @@ compound_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, compound_stmt_type, res); return res; } @@ -1365,8 +1338,6 @@ assignment_rule(Parser *p) return NULL; } void * res = NULL; - if (_PyPegen_is_memoized(p, assignment_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1508,7 +1479,6 @@ assignment_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, assignment_type, res); return res; } @@ -1533,8 +1503,6 @@ augassign_rule(Parser *p) return NULL; } AugOperator* res = NULL; - if (_PyPegen_is_memoized(p, augassign_type, &res)) - return res; int mark = p->mark; { // '+=' void *literal; @@ -1733,7 +1701,6 @@ augassign_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, augassign_type, res); return res; } @@ -1745,8 +1712,6 @@ global_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, global_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1784,7 +1749,6 @@ global_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, global_stmt_type, res); return res; } @@ -1796,8 +1760,6 @@ nonlocal_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, nonlocal_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1835,7 +1797,6 @@ nonlocal_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, nonlocal_stmt_type, res); return res; } @@ -1847,8 +1808,6 @@ yield_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, yield_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1883,7 +1842,6 @@ yield_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, yield_stmt_type, res); return res; } @@ -1895,8 +1853,6 @@ assert_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, assert_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1937,7 +1893,6 @@ assert_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, assert_stmt_type, res); return res; } @@ -1949,8 +1904,6 @@ del_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, del_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -1988,7 +1941,6 @@ del_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, del_stmt_type, res); return res; } @@ -2000,8 +1952,6 @@ import_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, import_stmt_type, &res)) - return res; int mark = p->mark; { // import_name stmt_ty import_name_var; @@ -2027,7 +1977,6 @@ import_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, import_stmt_type, res); return res; } @@ -2039,8 +1988,6 @@ import_name_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, import_name_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2078,7 +2025,6 @@ import_name_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, import_name_type, res); return res; } @@ -2092,8 +2038,6 @@ import_from_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, import_from_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2172,7 +2116,6 @@ import_from_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, import_from_type, res); return res; } @@ -2184,8 +2127,6 @@ import_from_targets_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, import_from_targets_type, &res)) - return res; int mark = p->mark; { // '(' import_from_as_names ','? ')' asdl_seq* a; @@ -2240,7 +2181,6 @@ import_from_targets_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, import_from_targets_type, res); return res; } @@ -2252,8 +2192,6 @@ import_from_as_names_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, import_from_as_names_type, &res)) - return res; int mark = p->mark; { // ','.import_from_as_name+ asdl_seq * a; @@ -2272,7 +2210,6 @@ import_from_as_names_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, import_from_as_names_type, res); return res; } @@ -2284,8 +2221,6 @@ import_from_as_name_rule(Parser *p) return NULL; } alias_ty res = NULL; - if (_PyPegen_is_memoized(p, import_from_as_name_type, &res)) - return res; int mark = p->mark; { // NAME ['as' NAME] expr_ty a; @@ -2307,7 +2242,6 @@ import_from_as_name_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, import_from_as_name_type, res); return res; } @@ -2319,8 +2253,6 @@ dotted_as_names_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, dotted_as_names_type, &res)) - return res; int mark = p->mark; { // ','.dotted_as_name+ asdl_seq * a; @@ -2339,7 +2271,6 @@ dotted_as_names_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, dotted_as_names_type, res); return res; } @@ -2351,8 +2282,6 @@ dotted_as_name_rule(Parser *p) return NULL; } alias_ty res = NULL; - if (_PyPegen_is_memoized(p, dotted_as_name_type, &res)) - return res; int mark = p->mark; { // dotted_name ['as' NAME] expr_ty a; @@ -2374,7 +2303,6 @@ dotted_as_name_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, dotted_as_name_type, res); return res; } @@ -2459,8 +2387,6 @@ if_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, if_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2542,7 +2468,6 @@ if_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, if_stmt_type, res); return res; } @@ -2556,8 +2481,6 @@ elif_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, elif_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2639,7 +2562,6 @@ elif_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, elif_stmt_type, res); return res; } @@ -2651,8 +2573,6 @@ else_block_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, else_block_type, &res)) - return res; int mark = p->mark; { // 'else' ':' block asdl_seq* b; @@ -2677,7 +2597,6 @@ else_block_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, else_block_type, res); return res; } @@ -2689,8 +2608,6 @@ while_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, while_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2737,7 +2654,6 @@ while_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, while_stmt_type, res); return res; } @@ -2749,8 +2665,6 @@ for_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, for_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2806,7 +2720,6 @@ for_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, for_stmt_type, res); return res; } @@ -2820,8 +2733,6 @@ with_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, with_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -2909,7 +2820,6 @@ with_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, with_stmt_type, res); return res; } @@ -2921,8 +2831,6 @@ with_item_rule(Parser *p) return NULL; } withitem_ty res = NULL; - if (_PyPegen_is_memoized(p, with_item_type, &res)) - return res; int mark = p->mark; { // expression ['as' target] expr_ty e; @@ -2944,7 +2852,6 @@ with_item_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, with_item_type, res); return res; } @@ -2958,8 +2865,6 @@ try_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, try_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3041,7 +2946,6 @@ try_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, try_stmt_type, res); return res; } @@ -3053,8 +2957,6 @@ except_block_rule(Parser *p) return NULL; } excepthandler_ty res = NULL; - if (_PyPegen_is_memoized(p, except_block_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3130,7 +3032,6 @@ except_block_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, except_block_type, res); return res; } @@ -3142,8 +3043,6 @@ finally_block_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, finally_block_type, &res)) - return res; int mark = p->mark; { // 'finally' ':' block asdl_seq* a; @@ -3168,7 +3067,6 @@ finally_block_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, finally_block_type, res); return res; } @@ -3180,8 +3078,6 @@ return_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, return_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3219,7 +3115,6 @@ return_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, return_stmt_type, res); return res; } @@ -3231,8 +3126,6 @@ raise_stmt_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, raise_stmt_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3296,7 +3189,6 @@ raise_stmt_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, raise_stmt_type, res); return res; } @@ -3308,8 +3200,6 @@ function_def_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, function_def_type, &res)) - return res; int mark = p->mark; { // decorators function_def_raw asdl_seq* d; @@ -3342,7 +3232,6 @@ function_def_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, function_def_type, res); return res; } @@ -3354,8 +3243,6 @@ function_def_raw_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, function_def_raw_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3414,7 +3301,6 @@ function_def_raw_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, function_def_raw_type, res); return res; } @@ -3426,8 +3312,6 @@ params_rule(Parser *p) return NULL; } arguments_ty res = NULL; - if (_PyPegen_is_memoized(p, params_type, &res)) - return res; int mark = p->mark; { // invalid_parameters void *invalid_parameters_var; @@ -3453,7 +3337,6 @@ params_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, params_type, res); return res; } @@ -3470,8 +3353,6 @@ parameters_rule(Parser *p) return NULL; } arguments_ty res = NULL; - if (_PyPegen_is_memoized(p, parameters_type, &res)) - return res; int mark = p->mark; { // slash_without_default [',' plain_names] [',' names_with_default] [',' star_etc?] asdl_seq* a; @@ -3574,7 +3455,6 @@ parameters_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, parameters_type, res); return res; } @@ -3586,8 +3466,6 @@ slash_without_default_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, slash_without_default_type, &res)) - return res; int mark = p->mark; { // plain_names ',' '/' asdl_seq* a; @@ -3612,7 +3490,6 @@ slash_without_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, slash_without_default_type, res); return res; } @@ -3624,8 +3501,6 @@ slash_with_default_rule(Parser *p) return NULL; } SlashWithDefault* res = NULL; - if (_PyPegen_is_memoized(p, slash_with_default_type, &res)) - return res; int mark = p->mark; { // [plain_names ','] names_with_default ',' '/' void *a; @@ -3653,7 +3528,6 @@ slash_with_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, slash_with_default_type, res); return res; } @@ -3668,8 +3542,6 @@ star_etc_rule(Parser *p) return NULL; } StarEtc* res = NULL; - if (_PyPegen_is_memoized(p, star_etc_type, &res)) - return res; int mark = p->mark; { // '*' plain_name name_with_optional_default* [',' kwds] ','? arg_ty a; @@ -3745,7 +3617,6 @@ star_etc_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, star_etc_type, res); return res; } @@ -3757,8 +3628,6 @@ name_with_optional_default_rule(Parser *p) return NULL; } NameDefaultPair* res = NULL; - if (_PyPegen_is_memoized(p, name_with_optional_default_type, &res)) - return res; int mark = p->mark; { // ',' plain_name ['=' expression] arg_ty a; @@ -3783,7 +3652,6 @@ name_with_optional_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, name_with_optional_default_type, res); return res; } @@ -3795,8 +3663,6 @@ names_with_default_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, names_with_default_type, &res)) - return res; int mark = p->mark; { // ','.name_with_default+ asdl_seq * a; @@ -3815,7 +3681,6 @@ names_with_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, names_with_default_type, res); return res; } @@ -3827,8 +3692,6 @@ name_with_default_rule(Parser *p) return NULL; } NameDefaultPair* res = NULL; - if (_PyPegen_is_memoized(p, name_with_default_type, &res)) - return res; int mark = p->mark; { // plain_name '=' expression expr_ty e; @@ -3853,7 +3716,6 @@ name_with_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, name_with_default_type, res); return res; } @@ -3897,8 +3759,6 @@ plain_name_rule(Parser *p) return NULL; } arg_ty res = NULL; - if (_PyPegen_is_memoized(p, plain_name_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -3936,7 +3796,6 @@ plain_name_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, plain_name_type, res); return res; } @@ -3948,8 +3807,6 @@ kwds_rule(Parser *p) return NULL; } arg_ty res = NULL; - if (_PyPegen_is_memoized(p, kwds_type, &res)) - return res; int mark = p->mark; { // '**' plain_name arg_ty a; @@ -3971,7 +3828,6 @@ kwds_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, kwds_type, res); return res; } @@ -3983,8 +3839,6 @@ annotation_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, annotation_type, &res)) - return res; int mark = p->mark; { // expression expr_ty expression_var; @@ -3999,7 +3853,6 @@ annotation_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, annotation_type, res); return res; } @@ -4011,8 +3864,6 @@ decorators_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, decorators_type, &res)) - return res; int mark = p->mark; { // (('@' named_expression NEWLINE))+ asdl_seq * a; @@ -4031,7 +3882,6 @@ decorators_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, decorators_type, res); return res; } @@ -4043,8 +3893,6 @@ class_def_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, class_def_type, &res)) - return res; int mark = p->mark; { // decorators class_def_raw asdl_seq* a; @@ -4077,7 +3925,6 @@ class_def_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, class_def_type, res); return res; } @@ -4089,8 +3936,6 @@ class_def_raw_rule(Parser *p) return NULL; } stmt_ty res = NULL; - if (_PyPegen_is_memoized(p, class_def_raw_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4137,7 +3982,6 @@ class_def_raw_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, class_def_raw_type, res); return res; } @@ -4212,8 +4056,6 @@ expressions_list_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, expressions_list_type, &res)) - return res; int mark = p->mark; { // ','.star_expression+ ','? asdl_seq * a; @@ -4236,7 +4078,6 @@ expressions_list_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, expressions_list_type, res); return res; } @@ -4251,8 +4092,6 @@ star_expressions_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, star_expressions_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4331,7 +4170,6 @@ star_expressions_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, star_expressions_type, res); return res; } @@ -4405,8 +4243,6 @@ star_named_expressions_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, star_named_expressions_type, &res)) - return res; int mark = p->mark; { // ','.star_named_expression+ ','? asdl_seq * a; @@ -4429,7 +4265,6 @@ star_named_expressions_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, star_named_expressions_type, res); return res; } @@ -4441,8 +4276,6 @@ star_named_expression_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, star_named_expression_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4491,7 +4324,6 @@ star_named_expression_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, star_named_expression_type, res); return res; } @@ -4503,8 +4335,6 @@ named_expression_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, named_expression_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4569,7 +4399,6 @@ named_expression_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, named_expression_type, res); return res; } @@ -4581,8 +4410,6 @@ annotated_rhs_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, annotated_rhs_type, &res)) - return res; int mark = p->mark; { // yield_expr expr_ty yield_expr_var; @@ -4608,7 +4435,6 @@ annotated_rhs_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, annotated_rhs_type, res); return res; } @@ -4620,8 +4446,6 @@ expressions_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, expressions_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4700,7 +4524,6 @@ expressions_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, expressions_type, res); return res; } @@ -4794,8 +4617,6 @@ lambdef_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, lambdef_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -4839,7 +4660,6 @@ lambdef_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambdef_type, res); return res; } @@ -4856,8 +4676,6 @@ lambda_parameters_rule(Parser *p) return NULL; } arguments_ty res = NULL; - if (_PyPegen_is_memoized(p, lambda_parameters_type, &res)) - return res; int mark = p->mark; { // lambda_slash_without_default [',' lambda_plain_names] [',' lambda_names_with_default] [',' lambda_star_etc?] asdl_seq* a; @@ -4960,7 +4778,6 @@ lambda_parameters_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_parameters_type, res); return res; } @@ -4972,8 +4789,6 @@ lambda_slash_without_default_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, lambda_slash_without_default_type, &res)) - return res; int mark = p->mark; { // lambda_plain_names ',' '/' asdl_seq* a; @@ -4998,7 +4813,6 @@ lambda_slash_without_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_slash_without_default_type, res); return res; } @@ -5010,8 +4824,6 @@ lambda_slash_with_default_rule(Parser *p) return NULL; } SlashWithDefault* res = NULL; - if (_PyPegen_is_memoized(p, lambda_slash_with_default_type, &res)) - return res; int mark = p->mark; { // [lambda_plain_names ','] lambda_names_with_default ',' '/' void *a; @@ -5039,7 +4851,6 @@ lambda_slash_with_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_slash_with_default_type, res); return res; } @@ -5054,8 +4865,6 @@ lambda_star_etc_rule(Parser *p) return NULL; } StarEtc* res = NULL; - if (_PyPegen_is_memoized(p, lambda_star_etc_type, &res)) - return res; int mark = p->mark; { // '*' lambda_plain_name lambda_name_with_optional_default* [',' lambda_kwds] ','? arg_ty a; @@ -5131,7 +4940,6 @@ lambda_star_etc_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_star_etc_type, res); return res; } @@ -5143,8 +4951,6 @@ lambda_name_with_optional_default_rule(Parser *p) return NULL; } NameDefaultPair* res = NULL; - if (_PyPegen_is_memoized(p, lambda_name_with_optional_default_type, &res)) - return res; int mark = p->mark; { // ',' lambda_plain_name ['=' expression] arg_ty a; @@ -5169,7 +4975,6 @@ lambda_name_with_optional_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_name_with_optional_default_type, res); return res; } @@ -5181,8 +4986,6 @@ lambda_names_with_default_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, lambda_names_with_default_type, &res)) - return res; int mark = p->mark; { // ','.lambda_name_with_default+ asdl_seq * a; @@ -5201,7 +5004,6 @@ lambda_names_with_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_names_with_default_type, res); return res; } @@ -5213,8 +5015,6 @@ lambda_name_with_default_rule(Parser *p) return NULL; } NameDefaultPair* res = NULL; - if (_PyPegen_is_memoized(p, lambda_name_with_default_type, &res)) - return res; int mark = p->mark; { // lambda_plain_name '=' expression expr_ty e; @@ -5239,7 +5039,6 @@ lambda_name_with_default_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_name_with_default_type, res); return res; } @@ -5251,8 +5050,6 @@ lambda_plain_names_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, lambda_plain_names_type, &res)) - return res; int mark = p->mark; { // ','.(lambda_plain_name !'=')+ asdl_seq * a; @@ -5271,7 +5068,6 @@ lambda_plain_names_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_plain_names_type, res); return res; } @@ -5283,8 +5079,6 @@ lambda_plain_name_rule(Parser *p) return NULL; } arg_ty res = NULL; - if (_PyPegen_is_memoized(p, lambda_plain_name_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5319,7 +5113,6 @@ lambda_plain_name_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_plain_name_type, res); return res; } @@ -5331,8 +5124,6 @@ lambda_kwds_rule(Parser *p) return NULL; } arg_ty res = NULL; - if (_PyPegen_is_memoized(p, lambda_kwds_type, &res)) - return res; int mark = p->mark; { // '**' lambda_plain_name arg_ty a; @@ -5354,7 +5145,6 @@ lambda_kwds_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lambda_kwds_type, res); return res; } @@ -5552,8 +5342,6 @@ comparison_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, comparison_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5602,7 +5390,6 @@ comparison_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, comparison_type, res); return res; } @@ -5624,8 +5411,6 @@ compare_op_bitwise_or_pair_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, compare_op_bitwise_or_pair_type, &res)) - return res; int mark = p->mark; { // eq_bitwise_or CmpopExprPair* eq_bitwise_or_var; @@ -5739,7 +5524,6 @@ compare_op_bitwise_or_pair_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, compare_op_bitwise_or_pair_type, res); return res; } @@ -5751,8 +5535,6 @@ eq_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, eq_bitwise_or_type, &res)) - return res; int mark = p->mark; { // '==' bitwise_or expr_ty a; @@ -5774,7 +5556,6 @@ eq_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, eq_bitwise_or_type, res); return res; } @@ -5786,8 +5567,6 @@ noteq_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, noteq_bitwise_or_type, &res)) - return res; int mark = p->mark; { // ('!=') bitwise_or void *_tmp_86_var; @@ -5809,7 +5588,6 @@ noteq_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, noteq_bitwise_or_type, res); return res; } @@ -5821,8 +5599,6 @@ lte_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, lte_bitwise_or_type, &res)) - return res; int mark = p->mark; { // '<=' bitwise_or expr_ty a; @@ -5844,7 +5620,6 @@ lte_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lte_bitwise_or_type, res); return res; } @@ -5856,8 +5631,6 @@ lt_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, lt_bitwise_or_type, &res)) - return res; int mark = p->mark; { // '<' bitwise_or expr_ty a; @@ -5879,7 +5652,6 @@ lt_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, lt_bitwise_or_type, res); return res; } @@ -5891,8 +5663,6 @@ gte_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, gte_bitwise_or_type, &res)) - return res; int mark = p->mark; { // '>=' bitwise_or expr_ty a; @@ -5914,7 +5684,6 @@ gte_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, gte_bitwise_or_type, res); return res; } @@ -5926,8 +5695,6 @@ gt_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, gt_bitwise_or_type, &res)) - return res; int mark = p->mark; { // '>' bitwise_or expr_ty a; @@ -5949,7 +5716,6 @@ gt_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, gt_bitwise_or_type, res); return res; } @@ -5961,8 +5727,6 @@ notin_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, notin_bitwise_or_type, &res)) - return res; int mark = p->mark; { // 'not' 'in' bitwise_or expr_ty a; @@ -5987,7 +5751,6 @@ notin_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, notin_bitwise_or_type, res); return res; } @@ -5999,8 +5762,6 @@ in_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, in_bitwise_or_type, &res)) - return res; int mark = p->mark; { // 'in' bitwise_or expr_ty a; @@ -6022,7 +5783,6 @@ in_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, in_bitwise_or_type, res); return res; } @@ -6034,8 +5794,6 @@ isnot_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, isnot_bitwise_or_type, &res)) - return res; int mark = p->mark; { // 'is' 'not' bitwise_or expr_ty a; @@ -6060,7 +5818,6 @@ isnot_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, isnot_bitwise_or_type, res); return res; } @@ -6072,8 +5829,6 @@ is_bitwise_or_rule(Parser *p) return NULL; } CmpopExprPair* res = NULL; - if (_PyPegen_is_memoized(p, is_bitwise_or_type, &res)) - return res; int mark = p->mark; { // 'is' bitwise_or expr_ty a; @@ -6095,7 +5850,6 @@ is_bitwise_or_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, is_bitwise_or_type, res); return res; } @@ -6923,8 +6677,6 @@ power_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, power_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -6976,7 +6728,6 @@ power_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, power_type, res); return res; } @@ -7232,8 +6983,6 @@ slices_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, slices_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7289,7 +7038,6 @@ slices_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, slices_type, res); return res; } @@ -7301,8 +7049,6 @@ slice_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, slice_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7361,7 +7107,6 @@ slice_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, slice_type, res); return res; } @@ -7384,8 +7129,6 @@ atom_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, atom_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7578,7 +7321,6 @@ atom_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, atom_type, res); return res; } @@ -7622,8 +7364,6 @@ list_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, list_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7664,7 +7404,6 @@ list_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, list_type, res); return res; } @@ -7676,8 +7415,6 @@ listcomp_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, listcomp_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7732,7 +7469,6 @@ listcomp_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, listcomp_type, res); return res; } @@ -7744,8 +7480,6 @@ tuple_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, tuple_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7786,7 +7520,6 @@ tuple_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, tuple_type, res); return res; } @@ -7798,8 +7531,6 @@ group_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, group_type, &res)) - return res; int mark = p->mark; { // '(' (yield_expr | named_expression) ')' void *a; @@ -7824,7 +7555,6 @@ group_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, group_type, res); return res; } @@ -7836,8 +7566,6 @@ genexp_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, genexp_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7892,7 +7620,6 @@ genexp_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, genexp_type, res); return res; } @@ -7904,8 +7631,6 @@ set_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, set_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7946,7 +7671,6 @@ set_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, set_type, res); return res; } @@ -7958,8 +7682,6 @@ setcomp_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, setcomp_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8014,7 +7736,6 @@ setcomp_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, setcomp_type, res); return res; } @@ -8026,8 +7747,6 @@ dict_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, dict_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8068,7 +7787,6 @@ dict_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, dict_type, res); return res; } @@ -8080,8 +7798,6 @@ dictcomp_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, dictcomp_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8125,7 +7841,6 @@ dictcomp_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, dictcomp_type, res); return res; } @@ -8137,8 +7852,6 @@ kvpairs_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, kvpairs_type, &res)) - return res; int mark = p->mark; { // ','.kvpair+ ','? asdl_seq * a; @@ -8161,7 +7874,6 @@ kvpairs_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, kvpairs_type, res); return res; } @@ -8173,8 +7885,6 @@ kvpair_rule(Parser *p) return NULL; } KeyValuePair* res = NULL; - if (_PyPegen_is_memoized(p, kvpair_type, &res)) - return res; int mark = p->mark; { // '**' bitwise_or expr_ty a; @@ -8217,7 +7927,6 @@ kvpair_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, kvpair_type, res); return res; } @@ -8229,8 +7938,6 @@ for_if_clauses_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, for_if_clauses_type, &res)) - return res; int mark = p->mark; { // ((ASYNC? 'for' star_targets 'in' disjunction (('if' disjunction))*))+ asdl_seq * a; @@ -8249,7 +7956,6 @@ for_if_clauses_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, for_if_clauses_type, res); return res; } @@ -8261,8 +7967,6 @@ yield_expr_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, yield_expr_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8329,7 +8033,6 @@ yield_expr_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, yield_expr_type, res); return res; } @@ -8390,8 +8093,6 @@ args_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, args_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8478,7 +8179,6 @@ args_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, args_type, res); return res; } @@ -8493,8 +8193,6 @@ kwargs_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, kwargs_type, &res)) - return res; int mark = p->mark; { // ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+ asdl_seq * a; @@ -8541,7 +8239,6 @@ kwargs_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, kwargs_type, res); return res; } @@ -8553,8 +8250,6 @@ starred_expression_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, starred_expression_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8592,7 +8287,6 @@ starred_expression_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, starred_expression_type, res); return res; } @@ -8604,8 +8298,6 @@ kwarg_or_starred_rule(Parser *p) return NULL; } KeywordOrStarred* res = NULL; - if (_PyPegen_is_memoized(p, kwarg_or_starred_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8661,7 +8353,6 @@ kwarg_or_starred_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, kwarg_or_starred_type, res); return res; } @@ -8673,8 +8364,6 @@ kwarg_or_double_starred_rule(Parser *p) return NULL; } KeywordOrStarred* res = NULL; - if (_PyPegen_is_memoized(p, kwarg_or_double_starred_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8741,7 +8430,6 @@ kwarg_or_double_starred_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, kwarg_or_double_starred_type, res); return res; } @@ -8753,8 +8441,6 @@ star_targets_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, star_targets_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8813,7 +8499,6 @@ star_targets_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, star_targets_type, res); return res; } @@ -8825,8 +8510,6 @@ star_targets_seq_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, star_targets_seq_type, &res)) - return res; int mark = p->mark; { // ','.star_target+ ','? asdl_seq * a; @@ -8849,7 +8532,6 @@ star_targets_seq_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, star_targets_seq_type, res); return res; } @@ -8996,8 +8678,6 @@ star_atom_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, star_atom_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -9103,7 +8783,6 @@ star_atom_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, star_atom_type, res); return res; } @@ -9118,8 +8797,6 @@ inside_paren_ann_assign_target_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, inside_paren_ann_assign_target_type, &res)) - return res; int mark = p->mark; { // ann_assign_subscript_attribute_target expr_ty ann_assign_subscript_attribute_target_var; @@ -9170,7 +8847,6 @@ inside_paren_ann_assign_target_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, inside_paren_ann_assign_target_type, res); return res; } @@ -9184,8 +8860,6 @@ ann_assign_subscript_attribute_target_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, ann_assign_subscript_attribute_target_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -9262,7 +8936,6 @@ ann_assign_subscript_attribute_target_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, ann_assign_subscript_attribute_target_type, res); return res; } @@ -9274,8 +8947,6 @@ del_targets_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, del_targets_type, &res)) - return res; int mark = p->mark; { // ','.del_target+ ','? asdl_seq * a; @@ -9298,7 +8969,6 @@ del_targets_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, del_targets_type, res); return res; } @@ -9414,8 +9084,6 @@ del_t_atom_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, del_t_atom_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -9521,7 +9189,6 @@ del_t_atom_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, del_t_atom_type, res); return res; } @@ -9533,8 +9200,6 @@ targets_rule(Parser *p) return NULL; } asdl_seq* res = NULL; - if (_PyPegen_is_memoized(p, targets_type, &res)) - return res; int mark = p->mark; { // ','.target+ ','? asdl_seq * a; @@ -9557,7 +9222,6 @@ targets_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, targets_type, res); return res; } @@ -9869,8 +9533,6 @@ t_lookahead_rule(Parser *p) return NULL; } void * res = NULL; - if (_PyPegen_is_memoized(p, t_lookahead_type, &res)) - return res; int mark = p->mark; { // '(' void *literal; @@ -9907,7 +9569,6 @@ t_lookahead_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, t_lookahead_type, res); return res; } @@ -9919,8 +9580,6 @@ t_atom_rule(Parser *p) return NULL; } expr_ty res = NULL; - if (_PyPegen_is_memoized(p, t_atom_type, &res)) - return res; int mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -10026,7 +9685,6 @@ t_atom_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, t_atom_type, res); return res; } @@ -10041,8 +9699,6 @@ incorrect_arguments_rule(Parser *p) return NULL; } void * res = NULL; - if (_PyPegen_is_memoized(p, incorrect_arguments_type, &res)) - return res; int mark = p->mark; { // args ',' '*' expr_ty args_var; @@ -10113,7 +9769,6 @@ incorrect_arguments_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, incorrect_arguments_type, res); return res; } @@ -10125,8 +9780,6 @@ invalid_named_expression_rule(Parser *p) return NULL; } void * res = NULL; - if (_PyPegen_is_memoized(p, invalid_named_expression_type, &res)) - return res; int mark = p->mark; { // expression ':=' expression expr_ty a; @@ -10151,7 +9804,6 @@ invalid_named_expression_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, invalid_named_expression_type, res); return res; } @@ -10167,8 +9819,6 @@ invalid_assignment_rule(Parser *p) return NULL; } void * res = NULL; - if (_PyPegen_is_memoized(p, invalid_assignment_type, &res)) - return res; int mark = p->mark; { // list ':' expr_ty list_var; @@ -10254,7 +9904,6 @@ invalid_assignment_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, invalid_assignment_type, res); return res; } @@ -10266,8 +9915,6 @@ invalid_block_rule(Parser *p) return NULL; } void * res = NULL; - if (_PyPegen_is_memoized(p, invalid_block_type, &res)) - return res; int mark = p->mark; { // NEWLINE !INDENT void *newline_var; @@ -10288,7 +9935,6 @@ invalid_block_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, invalid_block_type, res); return res; } @@ -10300,8 +9946,6 @@ invalid_comprehension_rule(Parser *p) return NULL; } void * res = NULL; - if (_PyPegen_is_memoized(p, invalid_comprehension_type, &res)) - return res; int mark = p->mark; { // ('[' | '(' | '{') '*' expression for_if_clauses void *_tmp_121_var; @@ -10329,7 +9973,6 @@ invalid_comprehension_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, invalid_comprehension_type, res); return res; } @@ -10342,8 +9985,6 @@ invalid_parameters_rule(Parser *p) return NULL; } void * res = NULL; - if (_PyPegen_is_memoized(p, invalid_parameters_type, &res)) - return res; int mark = p->mark; { // [plain_names ','] (slash_with_default | names_with_default) ',' plain_names void *_tmp_123_var; @@ -10372,7 +10013,6 @@ invalid_parameters_rule(Parser *p) } res = NULL; done: - _PyPegen_insert_memo(p, mark, invalid_parameters_type, res); return res; } diff --git a/Tools/peg_generator/pegen/grammar_parser.py b/Tools/peg_generator/pegen/grammar_parser.py index 56b032273c10d3..15d6bf2b727541 100644 --- a/Tools/peg_generator/pegen/grammar_parser.py +++ b/Tools/peg_generator/pegen/grammar_parser.py @@ -160,30 +160,11 @@ def rule(self) -> Optional[Rule]: cut = False rulename = self.rulename() if rulename: - opt = self.memoflag(), - if opt: - literal = self.expect(":") - if literal: - alts = self.alts() - if alts: - newline = self.expect('NEWLINE') - if newline: - indent = self.expect('INDENT') - if indent: - more_alts = self.more_alts() - if more_alts: - dedent = self.expect('DEDENT') - if dedent: - return Rule ( rulename [ 0 ] , rulename [ 1 ] , Rhs ( alts . alts + more_alts . alts ) , memo = opt ) - self.reset(mark) - if cut: return None - cut = False - rulename = self.rulename() - if rulename: - opt = self.memoflag(), - if opt: - literal = self.expect(":") - if literal: + opt = self.memoflag() + literal = self.expect(":") + if literal: + alts = self.alts() + if alts: newline = self.expect('NEWLINE') if newline: indent = self.expect('INDENT') @@ -192,21 +173,37 @@ def rule(self) -> Optional[Rule]: if more_alts: dedent = self.expect('DEDENT') if dedent: - return Rule ( rulename [ 0 ] , rulename [ 1 ] , more_alts , memo = opt ) + return Rule ( rulename [ 0 ] , rulename [ 1 ] , Rhs ( alts . alts + more_alts . alts ) , memo = opt ) self.reset(mark) if cut: return None cut = False rulename = self.rulename() if rulename: - opt = self.memoflag(), - if opt: - literal = self.expect(":") - if literal: - alts = self.alts() - if alts: - newline = self.expect('NEWLINE') - if newline: - return Rule ( rulename [ 0 ] , rulename [ 1 ] , alts , memo = opt ) + opt = self.memoflag() + literal = self.expect(":") + if literal: + newline = self.expect('NEWLINE') + if newline: + indent = self.expect('INDENT') + if indent: + more_alts = self.more_alts() + if more_alts: + dedent = self.expect('DEDENT') + if dedent: + return Rule ( rulename [ 0 ] , rulename [ 1 ] , more_alts , memo = opt ) + self.reset(mark) + if cut: return None + cut = False + rulename = self.rulename() + if rulename: + opt = self.memoflag() + literal = self.expect(":") + if literal: + alts = self.alts() + if alts: + newline = self.expect('NEWLINE') + if newline: + return Rule ( rulename [ 0 ] , rulename [ 1 ] , alts , memo = opt ) self.reset(mark) if cut: return None return None @@ -383,10 +380,9 @@ def named_item(self) -> Optional[NamedItem]: literal = self.expect('=') if literal: cut = True - if cut: - item = self.item() - if item: - return NamedItem ( name . string , item ) + item = self.item() + if item: + return NamedItem ( name . string , item ) self.reset(mark) if cut: return None cut = False @@ -411,20 +407,18 @@ def lookahead(self) -> Optional[LookaheadOrCut]: literal = self.expect('&') if literal: cut = True - if cut: - atom = self.atom() - if atom: - return PositiveLookahead ( atom ) + atom = self.atom() + if atom: + return PositiveLookahead ( atom ) self.reset(mark) if cut: return None cut = False literal = self.expect('!') if literal: cut = True - if cut: - atom = self.atom() - if atom: - return NegativeLookahead ( atom ) + atom = self.atom() + if atom: + return NegativeLookahead ( atom ) self.reset(mark) if cut: return None cut = False @@ -443,12 +437,11 @@ def item(self) -> Optional[Item]: literal = self.expect('[') if literal: cut = True - if cut: - alts = self.alts() - if alts: - literal_1 = self.expect(']') - if literal_1: - return Opt ( alts ) + alts = self.alts() + if alts: + literal_1 = self.expect(']') + if literal_1: + return Opt ( alts ) self.reset(mark) if cut: return None cut = False @@ -503,12 +496,11 @@ def atom(self) -> Optional[Plain]: literal = self.expect('(') if literal: cut = True - if cut: - alts = self.alts() - if alts: - literal_1 = self.expect(')') - if literal_1: - return Group ( alts ) + alts = self.alts() + if alts: + literal_1 = self.expect(')') + if literal_1: + return Group ( alts ) self.reset(mark) if cut: return None cut = False @@ -533,12 +525,11 @@ def action(self) -> Optional[str]: literal = self.expect("{") if literal: cut = True - if cut: - target_atoms = self.target_atoms() - if target_atoms: - literal_1 = self.expect("}") - if literal_1: - return target_atoms + target_atoms = self.target_atoms() + if target_atoms: + literal_1 = self.expect("}") + if literal_1: + return target_atoms self.reset(mark) if cut: return None return None @@ -571,12 +562,11 @@ def target_atom(self) -> Optional[str]: literal = self.expect("{") if literal: cut = True - if cut: - target_atoms = self.target_atoms() - if target_atoms: - literal_1 = self.expect("}") - if literal_1: - return "{" + target_atoms + "}" + target_atoms = self.target_atoms() + if target_atoms: + literal_1 = self.expect("}") + if literal_1: + return "{" + target_atoms + "}" self.reset(mark) if cut: return None cut = False diff --git a/Tools/peg_generator/pegen/python_generator.py b/Tools/peg_generator/pegen/python_generator.py index a45ed8ca764128..a35daf1dda0377 100644 --- a/Tools/peg_generator/pegen/python_generator.py +++ b/Tools/peg_generator/pegen/python_generator.py @@ -45,81 +45,82 @@ class PythonCallMakerVisitor(GrammarVisitor): def __init__(self, parser_generator: ParserGenerator): self.gen = parser_generator - self.cache: Dict[Any, Any] = {} + self.cache: Dict[Any, Any, bool] = {} - def visit_NameLeaf(self, node: NameLeaf) -> Tuple[Optional[str], str]: + def visit_NameLeaf(self, node: NameLeaf) -> Tuple[Optional[str], str, bool]: name = node.value if name in ("NAME", "NUMBER", "STRING", "OP"): name = name.lower() - return name, f"self.{name}()" + return name, f"self.{name}()", False if name in ("NEWLINE", "DEDENT", "INDENT", "ENDMARKER", "ASYNC", "AWAIT"): - return name.lower(), f"self.expect({name!r})" - return name, f"self.{name}()" + return name.lower(), f"self.expect({name!r})", False + return name, f"self.{name}()", False - def visit_StringLeaf(self, node: StringLeaf) -> Tuple[str, str]: - return "literal", f"self.expect({node.value})" + def visit_StringLeaf(self, node: StringLeaf) -> Tuple[str, str, bool]: + return "literal", f"self.expect({node.value})", False - def visit_Rhs(self, node: Rhs) -> Tuple[Optional[str], str]: + def visit_Rhs(self, node: Rhs) -> Tuple[Optional[str], str, bool]: if node in self.cache: return self.cache[node] if len(node.alts) == 1 and len(node.alts[0].items) == 1: self.cache[node] = self.visit(node.alts[0].items[0]) else: name = self.gen.name_node(node) - self.cache[node] = name, f"self.{name}()" + self.cache[node] = name, f"self.{name}()", False return self.cache[node] - def visit_NamedItem(self, node: NamedItem) -> Tuple[Optional[str], str]: - name, call = self.visit(node.item) + def visit_NamedItem(self, node: NamedItem) -> Tuple[Optional[str], str, bool]: + name, call, opt = self.visit(node.item) if node.name: name = node.name - return name, call + return name, call, opt def lookahead_call_helper(self, node: Lookahead) -> Tuple[str, str]: - name, call = self.visit(node.node) + name, call, opt = self.visit(node.node) head, tail = call.split("(", 1) assert tail[-1] == ")" + assert not opt tail = tail[:-1] return head, tail - def visit_PositiveLookahead(self, node: PositiveLookahead) -> Tuple[None, str]: + def visit_PositiveLookahead(self, node: PositiveLookahead) -> Tuple[None, str, bool]: head, tail = self.lookahead_call_helper(node) - return None, f"self.positive_lookahead({head}, {tail})" + return None, f"self.positive_lookahead({head}, {tail})", False def visit_NegativeLookahead(self, node: NegativeLookahead) -> Tuple[None, str]: head, tail = self.lookahead_call_helper(node) - return None, f"self.negative_lookahead({head}, {tail})" + return None, f"self.negative_lookahead({head}, {tail})", False - def visit_Opt(self, node: Opt) -> Tuple[str, str]: - name, call = self.visit(node.node) - return "opt", f"{call}," # Note trailing comma! + def visit_Opt(self, node: Opt) -> Tuple[str, str, bool]: + name, call, opt = self.visit(node.node) + return "opt", call, True - def visit_Repeat0(self, node: Repeat0) -> Tuple[str, str]: + def visit_Repeat0(self, node: Repeat0) -> Tuple[str, str, bool]: if node in self.cache: return self.cache[node] name = self.gen.name_loop(node.node, False) - self.cache[node] = name, f"self.{name}()," # Also a trailing comma! + self.cache[node] = name, f"self.{name}()", True return self.cache[node] - def visit_Repeat1(self, node: Repeat1) -> Tuple[str, str]: + def visit_Repeat1(self, node: Repeat1) -> Tuple[str, str, bool]: if node in self.cache: return self.cache[node] name = self.gen.name_loop(node.node, True) - self.cache[node] = name, f"self.{name}()" # But no trailing comma here! + self.cache[node] = name, f"self.{name}()", False return self.cache[node] - def visit_Gather(self, node: Gather) -> Tuple[str, str]: + def visit_Gather(self, node: Gather) -> Tuple[str, str, bool]: if node in self.cache: return self.cache[node] name = self.gen.name_gather(node) - self.cache[node] = name, f"self.{name}()" # No trailing comma here either! + self.cache[node] = name, f"self.{name}()", False return self.cache[node] - def visit_Group(self, node: Group) -> Tuple[Optional[str], str]: + def visit_Group(self, node: Group) -> Tuple[Optional[str], str, bool]: return self.visit(node.rhs) - def visit_Cut(self, node: Cut) -> Tuple[str, str]: - return "cut", "True" + def visit_Cut(self, node: Cut) -> Tuple[str, str, bool]: + return "cut", "True", True class PythonParserGenerator(ParserGenerator, GrammarVisitor): @@ -174,16 +175,20 @@ def visit_Rule(self, node: Rule) -> None: self.print("return None") def visit_NamedItem(self, node: NamedItem) -> None: - name, call = self.callmakervisitor.visit(node.item) + name, call, opt = self.callmakervisitor.visit(node.item) if node.name: name = node.name if not name: - self.print(f"if {call}:") + if not opt: + self.print(f"if {call}:") + self.level += 1 else: if name != "cut": name = self.dedupe(name) self.print(f"{name} = {call}") - self.print(f"if {name}:") + if not opt: + self.print(f"if {name}:") + self.level += 1 def visit_Rhs(self, node: Rhs, is_loop: bool = False, is_gather: bool = False) -> None: if is_loop: @@ -197,9 +202,9 @@ def visit_Alt(self, node: Alt, is_loop: bool, is_gather: bool) -> None: if is_loop: self.print("while True:") self.level += 1 + level = self.level for item in node.items: self.visit(item) - self.level += 1 action = node.action if not action: if is_gather: @@ -215,7 +220,7 @@ def visit_Alt(self, node: Alt, is_loop: bool, is_gather: bool) -> None: self.print("continue") else: self.print(f"return {action}") - self.level -= len(node.items) + self.level = level if is_loop: self.print("break") self.level -= 1 From e9a8ef40bb96ab22959ab4bbe3cd0ee389a019dd Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 29 Apr 2020 16:56:00 +0300 Subject: [PATCH 5/5] Minor fixes. --- Tools/peg_generator/pegen/grammar.py | 2 -- Tools/peg_generator/pegen/python_generator.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Tools/peg_generator/pegen/grammar.py b/Tools/peg_generator/pegen/grammar.py index 5d5f1c3b3d02af..dbb232a46f20b5 100644 --- a/Tools/peg_generator/pegen/grammar.py +++ b/Tools/peg_generator/pegen/grammar.py @@ -1,5 +1,3 @@ -#from __future__ import annotations - from abc import abstractmethod from typing import ( AbstractSet, diff --git a/Tools/peg_generator/pegen/python_generator.py b/Tools/peg_generator/pegen/python_generator.py index a35daf1dda0377..cda85121e4b1ef 100644 --- a/Tools/peg_generator/pegen/python_generator.py +++ b/Tools/peg_generator/pegen/python_generator.py @@ -87,7 +87,7 @@ def visit_PositiveLookahead(self, node: PositiveLookahead) -> Tuple[None, str, b head, tail = self.lookahead_call_helper(node) return None, f"self.positive_lookahead({head}, {tail})", False - def visit_NegativeLookahead(self, node: NegativeLookahead) -> Tuple[None, str]: + def visit_NegativeLookahead(self, node: NegativeLookahead) -> Tuple[None, str, bool]: head, tail = self.lookahead_call_helper(node) return None, f"self.negative_lookahead({head}, {tail})", False