Skip to content

Commit c6a6648

Browse files
Store None for the default kwonlyargs in function definition
1 parent 3c6bc7e commit c6a6648

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

src/lpython/parser/semantics.h

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -367,10 +367,17 @@ Arg** ARG2LIST(Allocator &al, Arg *x) {
367367
if(n_##x > 0) { \
368368
for(size_t i = 0; i < n_##x; i++) { \
369369
_m_##x.push_back(al, m_##x[i]->_arg); \
370-
if(m_##x[i]->default_value && !kw) { \
371-
defaults.push_back(al, m_##x[i]->defaults); \
372-
} else if (m_##x[i]->default_value){ \
373-
kw_defaults.push_back(al, m_##x[i]->defaults); \
370+
if(m_##x[i]->default_value) { \
371+
if (kw == 0) { \
372+
defaults.push_back(al, m_##x[i]->defaults); \
373+
} else { \
374+
kw_defaults.push_back(al, m_##x[i]->defaults); \
375+
} \
376+
} else { \
377+
if (kw == 1) { \
378+
kw_defaults.push_back(al, \
379+
(expr_t*)make_ConstantNone_t(al, l, nullptr)); \
380+
} \
374381
} \
375382
} \
376383
r->arguments.m_##x = _m_##x.p; \
@@ -394,25 +401,25 @@ static inline Args *FUNC_ARGS_01(Allocator &al, Location &l, Fn_Arg *parameters)
394401
if(parameters != nullptr) {
395402
Arg** m_posonlyargs = parameters->posonlyargs.p;
396403
size_t n_posonlyargs = parameters->posonlyargs.n;
397-
FUNC_ARGS_(posonlyargs, false);
404+
FUNC_ARGS_(posonlyargs, 0);
398405
}
399406
if(parameters != nullptr && parameters->args_val) {
400407
Arg** m_args = parameters->args->args.p;
401408
size_t n_args = parameters->args->args.n;
402-
FUNC_ARGS_(args, false);
409+
FUNC_ARGS_(args, 0);
403410

404411
if(parameters->args->var_kw_val) {
405412
Arg** m_vararg = parameters->args->var_kw->vararg.p;
406413
size_t n_vararg = parameters->args->var_kw->vararg.n;
407-
FUNC_ARGS_(vararg, false);
414+
FUNC_ARGS_(vararg, 0);
408415

409416
Arg** m_kwonlyargs = parameters->args->var_kw->kwonlyargs.p;
410417
size_t n_kwonlyargs = parameters->args->var_kw->kwonlyargs.n;
411-
FUNC_ARGS_(kwonlyargs, true);
418+
FUNC_ARGS_(kwonlyargs, 1);
412419

413420
Arg** m_kwarg = parameters->args->var_kw->kwarg.p;
414421
size_t n_kwarg = parameters->args->var_kw->kwarg.n;
415-
FUNC_ARGS_(kwarg, true);
422+
FUNC_ARGS_(kwarg, 2);
416423
}
417424
}
418425
r->arguments.m_kw_defaults = kw_defaults.p;

0 commit comments

Comments
 (0)