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
ca6d75f1
Commit
ca6d75f1
authored
Aug 30, 2014
by
Damien George
Browse files
py: Small simplifications in tuple and list accessors.
parent
4abff750
Changes
4
Hide whitespace changes
Inline
Side-by-side
py/obj.c
View file @
ca6d75f1
...
...
@@ -319,18 +319,10 @@ void mp_obj_get_array(mp_obj_t o, mp_uint_t *len, mp_obj_t **items) {
}
void
mp_obj_get_array_fixed_n
(
mp_obj_t
o
,
mp_uint_t
len
,
mp_obj_t
**
items
)
{
if
(
MP_OBJ_IS_TYPE
(
o
,
&
mp_type_tuple
)
||
MP_OBJ_IS_TYPE
(
o
,
&
mp_type_list
))
{
mp_uint_t
seq_len
;
if
(
MP_OBJ_IS_TYPE
(
o
,
&
mp_type_tuple
))
{
mp_obj_tuple_get
(
o
,
&
seq_len
,
items
);
}
else
{
mp_obj_list_get
(
o
,
&
seq_len
,
items
);
}
if
(
seq_len
!=
len
)
{
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_ValueError
,
"requested length %d but object has length %d"
,
len
,
seq_len
));
}
}
else
{
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_TypeError
,
"object '%s' is not a tuple or list"
,
mp_obj_get_type_str
(
o
)));
mp_uint_t
seq_len
;
mp_obj_get_array
(
o
,
&
seq_len
,
items
);
if
(
seq_len
!=
len
)
{
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_ValueError
,
"requested length %d but object has length %d"
,
len
,
seq_len
));
}
}
...
...
py/objtuple.c
View file @
ca6d75f1
...
...
@@ -241,12 +241,8 @@ mp_obj_t mp_obj_new_tuple(mp_uint_t n, const mp_obj_t *items) {
void
mp_obj_tuple_get
(
mp_obj_t
self_in
,
mp_uint_t
*
len
,
mp_obj_t
**
items
)
{
assert
(
MP_OBJ_IS_TYPE
(
self_in
,
&
mp_type_tuple
));
mp_obj_tuple_t
*
self
=
self_in
;
if
(
len
)
{
*
len
=
self
->
len
;
}
if
(
items
)
{
*
items
=
&
self
->
items
[
0
];
}
*
len
=
self
->
len
;
*
items
=
&
self
->
items
[
0
];
}
void
mp_obj_tuple_del
(
mp_obj_t
self_in
)
{
...
...
py/objzip.c
View file @
ca6d75f1
...
...
@@ -31,11 +31,12 @@
#include
"misc.h"
#include
"qstr.h"
#include
"obj.h"
#include
"objtuple.h"
#include
"runtime.h"
typedef
struct
_mp_obj_zip_t
{
mp_obj_base_t
base
;
in
t
n_iters
;
mp_uint_
t
n_iters
;
mp_obj_t
iters
[];
}
mp_obj_zip_t
;
...
...
@@ -45,7 +46,7 @@ STATIC mp_obj_t zip_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw,
mp_obj_zip_t
*
o
=
m_new_obj_var
(
mp_obj_zip_t
,
mp_obj_t
,
n_args
);
o
->
base
.
type
=
&
mp_type_zip
;
o
->
n_iters
=
n_args
;
for
(
in
t
i
=
0
;
i
<
n_args
;
i
++
)
{
for
(
mp_uint_
t
i
=
0
;
i
<
n_args
;
i
++
)
{
o
->
iters
[
i
]
=
mp_getiter
(
args
[
i
]);
}
return
o
;
...
...
@@ -54,22 +55,20 @@ STATIC mp_obj_t zip_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw,
STATIC
mp_obj_t
zip_iternext
(
mp_obj_t
self_in
)
{
assert
(
MP_OBJ_IS_TYPE
(
self_in
,
&
mp_type_zip
));
mp_obj_zip_t
*
self
=
self_in
;
mp_obj_t
*
items
;
if
(
self
->
n_iters
==
0
)
{
return
MP_OBJ_STOP_ITERATION
;
}
mp_obj_t
o
=
mp_obj_new_tuple
(
self
->
n_iters
,
NULL
);
mp_obj_tuple_get
(
o
,
NULL
,
&
items
);
mp_obj_tuple_t
*
tuple
=
mp_obj_new_tuple
(
self
->
n_iters
,
NULL
);
for
(
in
t
i
=
0
;
i
<
self
->
n_iters
;
i
++
)
{
for
(
mp_uint_
t
i
=
0
;
i
<
self
->
n_iters
;
i
++
)
{
mp_obj_t
next
=
mp_iternext
(
self
->
iters
[
i
]);
if
(
next
==
MP_OBJ_STOP_ITERATION
)
{
mp_obj_tuple_del
(
o
);
mp_obj_tuple_del
(
tuple
);
return
MP_OBJ_STOP_ITERATION
;
}
items
[
i
]
=
next
;
tuple
->
items
[
i
]
=
next
;
}
return
o
;
return
tuple
;
}
const
mp_obj_type_t
mp_type_zip
=
{
...
...
py/runtime.c
View file @
ca6d75f1
...
...
@@ -34,6 +34,7 @@
#include
"qstr.h"
#include
"obj.h"
#include
"objtuple.h"
#include
"objlist.h"
#include
"objmodule.h"
#include
"parsenum.h"
#include
"runtime0.h"
...
...
@@ -769,21 +770,18 @@ void mp_unpack_ex(mp_obj_t seq_in, mp_uint_t num_in, mp_obj_t *items) {
}
items
[
num_left
+
num_right
+
1
-
1
-
seq_len
]
=
item
;
}
mp_obj_t
rest
=
mp_obj_new_list
(
0
,
NULL
);
mp_obj_
list_
t
*
rest
=
mp_obj_new_list
(
0
,
NULL
);
while
((
item
=
mp_iternext
(
iterable
))
!=
MP_OBJ_STOP_ITERATION
)
{
mp_obj_list_append
(
rest
,
item
);
}
mp_uint_t
rest_len
;
mp_obj_t
*
rest_items
;
mp_obj_list_get
(
rest
,
&
rest_len
,
&
rest_items
);
if
(
rest_len
<
num_right
)
{
if
(
rest
->
len
<
num_right
)
{
goto
too_short
;
}
items
[
num_right
]
=
rest
;
for
(
mp_uint_t
i
=
0
;
i
<
num_right
;
i
++
)
{
items
[
num_right
-
1
-
i
]
=
rest
_
items
[
rest
_
len
-
num_right
+
i
];
items
[
num_right
-
1
-
i
]
=
rest
->
items
[
rest
->
len
-
num_right
+
i
];
}
mp_obj_list_set_len
(
rest
,
rest
_
len
-
num_right
);
mp_obj_list_set_len
(
rest
,
rest
->
len
-
num_right
);
}
return
;
...
...
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