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
3f8d34ca
Commit
3f8d34ca
authored
May 10, 2014
by
Paul Sokolovsky
Browse files
objlist: Support list slice deletion.
parent
94d82462
Changes
2
Hide whitespace changes
Inline
Side-by-side
py/objlist.c
View file @
3f8d34ca
...
...
@@ -153,6 +153,24 @@ STATIC mp_obj_t list_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) {
STATIC
mp_obj_t
list_subscr
(
mp_obj_t
self_in
,
mp_obj_t
index
,
mp_obj_t
value
)
{
if
(
value
==
MP_OBJ_NULL
)
{
// delete
#if MICROPY_ENABLE_SLICE
if
(
MP_OBJ_IS_TYPE
(
index
,
&
mp_type_slice
))
{
mp_obj_list_t
*
self
=
self_in
;
machine_uint_t
start
,
stop
;
if
(
!
mp_seq_get_fast_slice_indexes
(
self
->
len
,
index
,
&
start
,
&
stop
))
{
assert
(
0
);
}
int
len_adj
=
start
-
stop
;
//printf("Len adj: %d\n", len_adj);
assert
(
len_adj
<=
0
);
mp_seq_replace_slice_no_grow
(
self
->
items
,
self
->
len
,
start
,
stop
,
self
->
items
/*NULL*/
,
0
,
mp_obj_t
);
// Clear "freed" elements at the end of list
mp_seq_clear
(
self
->
items
,
self
->
len
+
len_adj
,
self
->
len
,
sizeof
(
*
self
->
items
));
self
->
len
+=
len_adj
;
return
mp_const_none
;
}
#endif
mp_obj_t
args
[
2
]
=
{
self_in
,
index
};
list_pop
(
2
,
args
);
return
mp_const_none
;
...
...
tests/basics/list_slice_assign.py
View file @
3f8d34ca
...
...
@@ -11,6 +11,9 @@ print(l)
l
=
list
(
x
)
l
[
1
:
3
]
=
[]
print
(
l
)
l
=
list
(
x
)
del
l
[
1
:
3
]
print
(
l
)
l
=
list
(
x
)
l
[:
3
]
=
[
10
,
20
]
...
...
@@ -18,6 +21,9 @@ print(l)
l
=
list
(
x
)
l
[:
3
]
=
[]
print
(
l
)
l
=
list
(
x
)
del
l
[:
3
]
print
(
l
)
l
=
list
(
x
)
l
[:
-
3
]
=
[
10
,
20
]
...
...
@@ -25,3 +31,6 @@ print(l)
l
=
list
(
x
)
l
[:
-
3
]
=
[]
print
(
l
)
l
=
list
(
x
)
del
l
[:
-
3
]
print
(
l
)
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