Ensure that early = are not matched by the parser as invalid comparisons (GH-25375)
diff --git a/Grammar/python.gram b/Grammar/python.gram
index 324793c..8524a12 100644
--- a/Grammar/python.gram
+++ b/Grammar/python.gram
@@ -447,6 +447,10 @@
| invalid_named_expression
| expression !':='
+direct_named_expression[expr_ty]:
+ | a=NAME ':=' ~ b=expression { _PyAST_NamedExpr(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, EXTRA) }
+ | expression !':='
+
annotated_rhs[expr_ty]: yield_expr | star_expressions
expressions[expr_ty]:
@@ -671,7 +675,7 @@
| a=args [','] &')' { a }
| invalid_arguments
args[expr_ty]:
- | a[asdl_expr_seq*]=','.(starred_expression | named_expression !'=')+ b=[',' k=kwargs {k}] { _PyPegen_collect_call_seqs(p, a, b, EXTRA) }
+ | a[asdl_expr_seq*]=','.(starred_expression | direct_named_expression !'=')+ b=[',' k=kwargs {k}] { _PyPegen_collect_call_seqs(p, a, b, EXTRA) }
| a=kwargs { _PyAST_Call(_PyPegen_dummy_name(p),
CHECK_NULL_ALLOWED(asdl_expr_seq*, _PyPegen_seq_extract_starred_exprs(p, a)),
CHECK_NULL_ALLOWED(asdl_keyword_seq*, _PyPegen_seq_delete_starred_exprs(p, a)),