@@ -376,14 +376,16 @@ Arg** ARG2LIST(Allocator &al, Arg *x) {
376
376
return v;
377
377
}
378
378
379
- #define FUNC_ARGS_ (x ) \
379
+ #define FUNC_ARGS_ (x, kw ) \
380
380
Vec<arg_t > _m_##x; \
381
381
_m_##x.reserve(al, 4 ); \
382
382
if (n_##x > 0 ) { \
383
383
for (size_t i = 0 ; i < n_##x; i++) { \
384
384
_m_##x.push_back (al, m_##x[i]->_arg ); \
385
- if (m_##x[i]->default_value ) { \
385
+ if (m_##x[i]->default_value && !kw ) { \
386
386
defaults.push_back (al, m_##x[i]->defaults ); \
387
+ } else if (m_##x[i]->default_value ){ \
388
+ kw_defaults.push_back (al, m_##x[i]->defaults ); \
387
389
} \
388
390
} \
389
391
}
@@ -397,12 +399,14 @@ static inline Args *FUNC_ARGS(Allocator &al, Location &l,
397
399
Args *r = al.allocate <Args>();
398
400
Vec<expr_t *> defaults;
399
401
defaults.reserve (al, 4 );
402
+ Vec<expr_t *> kw_defaults;
403
+ kw_defaults.reserve (al, 4 );
400
404
401
- FUNC_ARGS_ (posonlyargs);
402
- FUNC_ARGS_ (args);
403
- FUNC_ARGS_ (vararg);
404
- FUNC_ARGS_ (kwonlyargs);
405
- FUNC_ARGS_ (kwarg);
405
+ FUNC_ARGS_ (posonlyargs, false );
406
+ FUNC_ARGS_ (args, false );
407
+ FUNC_ARGS_ (vararg, false );
408
+ FUNC_ARGS_ (kwonlyargs, true );
409
+ FUNC_ARGS_ (kwarg, true );
406
410
407
411
r->arguments .loc = l;
408
412
r->arguments .m_posonlyargs = _m_posonlyargs.p ;
@@ -413,8 +417,8 @@ static inline Args *FUNC_ARGS(Allocator &al, Location &l,
413
417
r->arguments .n_vararg = _m_vararg.n ;
414
418
r->arguments .m_kwonlyargs = _m_kwonlyargs.p ;
415
419
r->arguments .n_kwonlyargs = _m_kwonlyargs.n ;
416
- r->arguments .m_kw_defaults = nullptr ;
417
- r->arguments .n_kw_defaults = 0 ;
420
+ r->arguments .m_kw_defaults = kw_defaults. p ;
421
+ r->arguments .n_kw_defaults = kw_defaults. n ;
418
422
r->arguments .m_kwarg = _m_kwarg.p ;
419
423
r->arguments .n_kwarg = _m_kwarg.n ;
420
424
r->arguments .m_defaults = defaults.p ;
@@ -498,6 +502,16 @@ static inline void ADD_TYPE_COMMENT_(LFortran::Parser &p, Location l,
498
502
FUNC_ARGS (p.m_a, l, posonlyargs.p, posonlyargs.n, \
499
503
args.p, args.n, ARG2LIST(p.m_a, vararg), 1, \
500
504
kwonlyargs.p, kwonlyargs.n, ARG2LIST(p.m_a, kwarg), 1)
505
+ #define STAR_ARGS_21 (posonlyargs, kwonlyargs, l ) FUNC_ARGS(p.m_a, l, \
506
+ posonlyargs.p, posonlyargs.n, nullptr , 0 , nullptr , 0 , \
507
+ kwonlyargs.p, kwonlyargs.n, nullptr , 0 )
508
+ #define STAR_ARGS_22 (posonlyargs, args, kwonlyargs, l ) FUNC_ARGS(p.m_a, l, \
509
+ posonlyargs.p, posonlyargs.n, args.p, args.n, nullptr , 0 , \
510
+ kwonlyargs.p, kwonlyargs.n, nullptr , 0 )
511
+ #define STAR_ARGS_23 (args, kwonlyargs, l ) FUNC_ARGS(p.m_a, l, nullptr , 0 , \
512
+ args.p, args.n, nullptr , 0 , kwonlyargs.p, kwonlyargs.n, nullptr , 0 )
513
+ #define STAR_ARGS_24 (kwonlyargs, l ) FUNC_ARGS(p.m_a, l, nullptr , 0 , \
514
+ nullptr , 0 , nullptr , 0 , kwonlyargs.p, kwonlyargs.n, nullptr , 0 )
501
515
502
516
#define FUNC_ARG_LIST_01 (args, l ) FUNC_ARGS(p.m_a, l, nullptr , 0 , \
503
517
args.p, args.n, nullptr , 0 , nullptr , 0 , nullptr , 0 )
0 commit comments