Skip to content
This repository was archived by the owner on Sep 6, 2023. It is now read-only.

Commit 2161d6b

Browse files
committed
py/objdict: Reuse dict-view key iterator for standard dict iterator.
It has equivalent behaviour and reusing it saves some code bytes.
1 parent c3bc8d7 commit 2161d6b

File tree

1 file changed

+14
-31
lines changed

1 file changed

+14
-31
lines changed

py/objdict.c

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -192,37 +192,6 @@ STATIC mp_obj_t dict_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
192192
}
193193
}
194194

195-
/******************************************************************************/
196-
/* dict iterator */
197-
198-
typedef struct _mp_obj_dict_it_t {
199-
mp_obj_base_t base;
200-
mp_fun_1_t iternext;
201-
mp_obj_t dict;
202-
size_t cur;
203-
} mp_obj_dict_it_t;
204-
205-
STATIC mp_obj_t dict_it_iternext(mp_obj_t self_in) {
206-
mp_obj_dict_it_t *self = MP_OBJ_TO_PTR(self_in);
207-
mp_map_elem_t *next = dict_iter_next(MP_OBJ_TO_PTR(self->dict), &self->cur);
208-
209-
if (next == NULL) {
210-
return MP_OBJ_STOP_ITERATION;
211-
} else {
212-
return next->key;
213-
}
214-
}
215-
216-
STATIC mp_obj_t dict_getiter(mp_obj_t self_in, mp_obj_iter_buf_t *iter_buf) {
217-
assert(sizeof(mp_obj_dict_it_t) <= sizeof(mp_obj_iter_buf_t));
218-
mp_obj_dict_it_t *o = (mp_obj_dict_it_t*)iter_buf;
219-
o->base.type = &mp_type_polymorph_iter;
220-
o->iternext = dict_it_iternext;
221-
o->dict = self_in;
222-
o->cur = 0;
223-
return MP_OBJ_FROM_PTR(o);
224-
}
225-
226195
/******************************************************************************/
227196
/* dict methods */
228197

@@ -527,6 +496,20 @@ STATIC mp_obj_t dict_values(mp_obj_t self_in) {
527496
}
528497
STATIC MP_DEFINE_CONST_FUN_OBJ_1(dict_values_obj, dict_values);
529498

499+
/******************************************************************************/
500+
/* dict iterator */
501+
502+
STATIC mp_obj_t dict_getiter(mp_obj_t self_in, mp_obj_iter_buf_t *iter_buf) {
503+
assert(sizeof(mp_obj_dict_view_it_t) <= sizeof(mp_obj_iter_buf_t));
504+
mp_check_self(MP_OBJ_IS_DICT_TYPE(self_in));
505+
mp_obj_dict_view_it_t *o = (mp_obj_dict_view_it_t*)iter_buf;
506+
o->base.type = &dict_view_it_type;
507+
o->kind = MP_DICT_VIEW_KEYS;
508+
o->dict = self_in;
509+
o->cur = 0;
510+
return MP_OBJ_FROM_PTR(o);
511+
}
512+
530513
/******************************************************************************/
531514
/* dict constructors & public C API */
532515

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy