diff options
author | Damien George <damien.p.george@gmail.com> | 2016-10-17 11:58:57 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-10-17 11:58:57 +1100 |
commit | a3edeb9ea5ebd05170af7c1e488724debce41a6f (patch) | |
tree | 7019c18971b7cc374077b9ff0b5bfe5b395267b7 /py | |
parent | e9404e5f5f058db954ac0a92cb5acfcef6f6724a (diff) | |
download | micropython-a3edeb9ea5ebd05170af7c1e488724debce41a6f.tar.gz micropython-a3edeb9ea5ebd05170af7c1e488724debce41a6f.zip |
py/objdict: Fix optimisation for allocating result in fromkeys.
Iterables don't respond to __len__, so call __len__ on the original
argument.
Diffstat (limited to 'py')
-rw-r--r-- | py/objdict.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/py/objdict.c b/py/objdict.c index 7a74557dc1..197a1916fe 100644 --- a/py/objdict.c +++ b/py/objdict.c @@ -250,15 +250,16 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(dict_copy_obj, dict_copy); // this is a classmethod STATIC mp_obj_t dict_fromkeys(size_t n_args, const mp_obj_t *args) { mp_obj_t iter = mp_getiter(args[1]); - mp_obj_t len = mp_obj_len_maybe(iter); mp_obj_t value = mp_const_none; mp_obj_t next = MP_OBJ_NULL; - mp_obj_t self_out; if (n_args > 2) { value = args[2]; } + // optimisation to allocate result based on len of argument + mp_obj_t self_out; + mp_obj_t len = mp_obj_len_maybe(args[1]); if (len == MP_OBJ_NULL) { /* object's type doesn't have a __len__ slot */ self_out = mp_obj_new_dict(0); |