summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2016-10-17 11:58:57 +1100
committerDamien George <damien.p.george@gmail.com>2016-10-17 11:58:57 +1100
commita3edeb9ea5ebd05170af7c1e488724debce41a6f (patch)
tree7019c18971b7cc374077b9ff0b5bfe5b395267b7 /py
parente9404e5f5f058db954ac0a92cb5acfcef6f6724a (diff)
downloadmicropython-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.c5
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);