diff options
author | stijn <stijn@ignitron.net> | 2024-08-21 16:22:01 +0200 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2024-10-07 11:37:52 +1100 |
commit | 338df1ae357eefe987df4429b88d3094f9c7b8c2 (patch) | |
tree | f2d3d9197a8d14c2be602a820a38126e77781c32 /py/objfun.c | |
parent | 548f88d2bd254f1328014a303f8bf602a0646421 (diff) |
py/objtype: Allow passing keyword arguments to native base __init__.
Allowing passing keyword arguments to a native base's __init__, i.e.
`make_new` in the C code. Previously only positional arguments were
allowed.
The main trade-off in this commit is that every call to the native base's
`make_new` is now going to be preceded by a call to
`mp_map_init_fixed_table` even though most of what that does is unused and
instead it merely serves as a way to pass the number of keyword arguments.
Fixes issue #15465.
Signed-off-by: stijn <stijn@ignitron.net>
Diffstat (limited to 'py/objfun.c')
-rw-r--r-- | py/objfun.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/py/objfun.c b/py/objfun.c index 8279605e9..0b1b8c115 100644 --- a/py/objfun.c +++ b/py/objfun.c @@ -107,7 +107,9 @@ static mp_obj_t fun_builtin_var_call(mp_obj_t self_in, size_t n_args, size_t n_k if (self->sig & 1) { // function allows keywords - // we create a map directly from the given args array + // we create a map directly from the given args array; self->fun.kw does still + // expect args to have both positional and keyword arguments, ordered as: + // arg0 arg1 ... arg<n_args> key0 value0 key1 value1 ... key<n_kw> value<n_kw> mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, args + n_args); |