@@ -193,22 +193,30 @@ static int
193193append_ast_args (_PyUnicodeWriter * writer , arguments_ty args )
194194{
195195 bool first ;
196- Py_ssize_t i , di , arg_count , default_count ;
196+ Py_ssize_t i , di , arg_count , posonlyarg_count , default_count ;
197197
198198 first = true;
199199
200- /* positional arguments with defaults */
200+ /* positional-only and positional arguments with defaults */
201+ posonlyarg_count = asdl_seq_LEN (args -> posonlyargs );
201202 arg_count = asdl_seq_LEN (args -> args );
202203 default_count = asdl_seq_LEN (args -> defaults );
203- for (i = 0 ; i < arg_count ; i ++ ) {
204+ for (i = 0 ; i < posonlyarg_count + arg_count ; i ++ ) {
204205 APPEND_STR_IF_NOT_FIRST (", " );
205- APPEND (arg , (arg_ty )asdl_seq_GET (args -> args , i ));
206+ if (i < posonlyarg_count ){
207+ APPEND (arg , (arg_ty )asdl_seq_GET (args -> posonlyargs , i ));
208+ } else {
209+ APPEND (arg , (arg_ty )asdl_seq_GET (args -> args , i - posonlyarg_count ));
210+ }
206211
207- di = i - arg_count + default_count ;
212+ di = i - posonlyarg_count - arg_count + default_count ;
208213 if (di >= 0 ) {
209214 APPEND_STR ("=" );
210215 APPEND_EXPR ((expr_ty )asdl_seq_GET (args -> defaults , di ), PR_TEST );
211216 }
217+ if (posonlyarg_count && i + 1 == posonlyarg_count ) {
218+ APPEND_STR (", /" );
219+ }
212220 }
213221
214222 /* vararg, or bare '*' if no varargs but keyword-only arguments present */
@@ -251,7 +259,9 @@ static int
251259append_ast_lambda (_PyUnicodeWriter * writer , expr_ty e , int level )
252260{
253261 APPEND_STR_IF (level > PR_TEST , "(" );
254- APPEND_STR (asdl_seq_LEN (e -> v .Lambda .args -> args ) ? "lambda " : "lambda" );
262+ Py_ssize_t n_positional = (asdl_seq_LEN (e -> v .Lambda .args -> args ) +
263+ asdl_seq_LEN (e -> v .Lambda .args -> posonlyargs ));
264+ APPEND_STR (n_positional ? "lambda " : "lambda" );
255265 APPEND (args , e -> v .Lambda .args );
256266 APPEND_STR (": " );
257267 APPEND_EXPR (e -> v .Lambda .body , PR_TEST );
0 commit comments