summaryrefslogtreecommitdiff
path: root/py/objfun.c
diff options
context:
space:
mode:
authorstijn <stijn@ignitron.net>2024-08-21 16:22:01 +0200
committerDamien George <damien@micropython.org>2024-10-07 11:37:52 +1100
commit338df1ae357eefe987df4429b88d3094f9c7b8c2 (patch)
treef2d3d9197a8d14c2be602a820a38126e77781c32 /py/objfun.c
parent548f88d2bd254f1328014a303f8bf602a0646421 (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.c4
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);