py: Allow dict constructor to take keyword arguments.
This commit is contained in:
parent
36f0ee1a54
commit
d7aadcfe1b
22
py/objdict.c
22
py/objdict.c
|
@ -32,8 +32,26 @@ STATIC void dict_print(void (*print)(void *env, const char *fmt, ...), void *env
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t dict_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args) {
|
STATIC mp_obj_t dict_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args) {
|
||||||
// TODO create from an iterable!
|
mp_obj_t dict;
|
||||||
return mp_obj_new_dict(0);
|
switch (n_args) {
|
||||||
|
case 0:
|
||||||
|
dict = mp_obj_new_dict(0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
// TODO create dict from an iterable!
|
||||||
|
assert(false);
|
||||||
|
|
||||||
|
default:
|
||||||
|
nlr_jump(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "dict takes at most 1 argument"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// add to the new dict any keyword args
|
||||||
|
for (const mp_obj_t *a = args + n_args; n_kw > 0; n_kw--, a += 2) {
|
||||||
|
mp_obj_dict_store(dict, a[0], a[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dict;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t dict_unary_op(int op, mp_obj_t self_in) {
|
STATIC mp_obj_t dict_unary_op(int op, mp_obj_t self_in) {
|
||||||
|
|
Loading…
Reference in New Issue