bpo-41697: Correctly handle KeywordOrStarred when parsing arguments in the parser (GH-22077)
diff --git a/Parser/pegen.c b/Parser/pegen.c
index 2507bc4..4beb2ab 100644
--- a/Parser/pegen.c
+++ b/Parser/pegen.c
@@ -2219,14 +2219,15 @@
}
-expr_ty _PyPegen_collect_call_seqs(Parser *p, asdl_seq *a, asdl_seq *b) {
+expr_ty _PyPegen_collect_call_seqs(Parser *p, asdl_seq *a, asdl_seq *b,
+ int lineno, int col_offset, int end_lineno,
+ int end_col_offset, PyArena *arena) {
Py_ssize_t args_len = asdl_seq_LEN(a);
Py_ssize_t total_len = args_len;
if (b == NULL) {
- expr_ty first = asdl_seq_GET(a, 0);
- expr_ty last = asdl_seq_GET(a, args_len - 1);
- return _Py_Call(_PyPegen_dummy_name(p), a, NULL, EXTRA_EXPR(first, last));
+ return _Py_Call(_PyPegen_dummy_name(p), a, NULL, lineno, col_offset,
+ end_lineno, end_col_offset, arena);
}
@@ -2237,7 +2238,7 @@
total_len += asdl_seq_LEN(starreds);
}
- asdl_seq *args = _Py_asdl_seq_new(total_len, p->arena);
+ asdl_seq *args = _Py_asdl_seq_new(total_len, arena);
Py_ssize_t i = 0;
for (i = 0; i < args_len; i++) {
@@ -2247,8 +2248,8 @@
asdl_seq_SET(args, i, asdl_seq_GET(starreds, i - args_len));
}
- expr_ty first = asdl_seq_GET(args, 0);
- expr_ty last = asdl_seq_GET(b, asdl_seq_LEN(b)-1);
+ return _Py_Call(_PyPegen_dummy_name(p), args, keywords, lineno,
+ col_offset, end_lineno, end_col_offset, arena);
- return _Py_Call(_PyPegen_dummy_name(p), args, keywords, EXTRA_EXPR(first, last));
+
}