Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
9daa7894
Commit
9daa7894
authored
Jan 14, 2014
by
John R. Lenton
Browse files
added enumerate()
parent
6c2401e9
Changes
6
Hide whitespace changes
Inline
Side-by-side
py/mpqstrraw.h
View file @
9daa7894
...
...
@@ -41,6 +41,7 @@ Q(chr)
Q
(
complex
)
Q
(
dict
)
Q
(
divmod
)
Q
(
enumerate
)
Q
(
float
)
Q
(
hash
)
Q
(
int
)
...
...
py/obj.h
View file @
9daa7894
...
...
@@ -294,6 +294,9 @@ void mp_obj_list_get(mp_obj_t self_in, uint *len, mp_obj_t **items);
void
mp_obj_list_store
(
mp_obj_t
self_in
,
mp_obj_t
index
,
mp_obj_t
value
);
mp_obj_t
list_sort
(
mp_obj_t
args
,
struct
_mp_map_t
*
kwargs
);
// enumerate
extern
const
mp_obj_type_t
enumerate_type
;
// dict
extern
const
mp_obj_type_t
dict_type
;
uint
mp_obj_dict_len
(
mp_obj_t
self_in
);
...
...
py/objenumerate.c
0 → 100644
View file @
9daa7894
#include
<stdlib.h>
#include
<assert.h>
#include
"misc.h"
#include
"mpconfig.h"
#include
"obj.h"
#include
"runtime.h"
typedef
struct
_mp_obj_enumerate_t
{
mp_obj_base_t
base
;
mp_obj_t
iter
;
machine_int_t
cur
;
}
mp_obj_enumerate_t
;
static
mp_obj_t
enumerate_getiter
(
mp_obj_t
self_in
)
{
return
self_in
;
}
static
mp_obj_t
enumerate_iternext
(
mp_obj_t
self_in
);
/* TODO: enumerate is one of the ones that can take args or kwargs.
Sticking to args for now */
static
mp_obj_t
enumerate_make_new
(
mp_obj_t
type_in
,
int
n_args
,
const
mp_obj_t
*
args
)
{
/* NOTE: args are backwards */
assert
(
n_args
>
0
);
args
+=
n_args
-
1
;
mp_obj_enumerate_t
*
o
=
m_new_obj
(
mp_obj_enumerate_t
);
o
->
base
.
type
=
&
enumerate_type
;
o
->
iter
=
rt_getiter
(
args
[
0
]);
o
->
cur
=
n_args
>
1
?
mp_obj_get_int
(
args
[
-
1
])
:
0
;
return
o
;
}
const
mp_obj_type_t
enumerate_type
=
{
{
&
mp_const_type
},
"enumerate"
,
.
make_new
=
enumerate_make_new
,
.
iternext
=
enumerate_iternext
,
.
getiter
=
enumerate_getiter
,
};
static
mp_obj_t
enumerate_iternext
(
mp_obj_t
self_in
)
{
assert
(
MP_OBJ_IS_TYPE
(
self_in
,
&
enumerate_type
));
mp_obj_enumerate_t
*
self
=
self_in
;
mp_obj_t
next
=
rt_iternext
(
self
->
iter
);
if
(
next
==
mp_const_stop_iteration
)
{
return
mp_const_stop_iteration
;
}
else
{
mp_obj_t
items
[]
=
{
MP_OBJ_NEW_SMALL_INT
(
self
->
cur
++
),
next
};
return
mp_obj_new_tuple
(
2
,
items
);
}
}
py/py.mk
View file @
9daa7894
...
...
@@ -77,6 +77,7 @@ PY_O_BASENAME = \
objclosure.o
\
objcomplex.o
\
objdict.o
\
objenumerate.o
\
objexcept.o
\
objfloat.o
\
objfun.o
\
...
...
py/runtime.c
View file @
9daa7894
...
...
@@ -105,6 +105,7 @@ void rt_init(void) {
mp_map_add_qstr
(
&
map_builtins
,
MP_QSTR_complex
,
(
mp_obj_t
)
&
complex_type
);
#endif
mp_map_add_qstr
(
&
map_builtins
,
MP_QSTR_dict
,
(
mp_obj_t
)
&
dict_type
);
mp_map_add_qstr
(
&
map_builtins
,
MP_QSTR_enumerate
,
(
mp_obj_t
)
&
enumerate_type
);
#if MICROPY_ENABLE_FLOAT
mp_map_add_qstr
(
&
map_builtins
,
MP_QSTR_float
,
(
mp_obj_t
)
&
float_type
);
#endif
...
...
tests/basics/tests/enumerate.py
0 → 100644
View file @
9daa7894
print
(
list
(
enumerate
([])))
print
(
list
(
enumerate
([
1
,
2
,
3
])))
print
(
list
(
enumerate
([
1
,
2
,
3
],
5
)))
print
(
list
(
enumerate
([
1
,
2
,
3
],
-
5
)))
print
(
list
(
enumerate
(
range
(
10000
))))
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment