Skip to content

Commit 7e480e8

Browse files
blazewiczdpgeorge
authored andcommitted
py: Use mp_obj_get_array where sequence may be a tuple or a list.
1 parent 1215dc4 commit 7e480e8

3 files changed

Lines changed: 10 additions & 27 deletions

File tree

py/objfun.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -511,17 +511,11 @@ STATIC mp_uint_t convert_obj_for_inline_asm(mp_obj_t obj) {
511511
// convert float to int (could also pass in float registers)
512512
return (mp_int_t)mp_obj_float_get(obj);
513513
#endif
514-
} else if (type == &mp_type_tuple) {
514+
} else if (type == &mp_type_tuple || type == &mp_type_list) {
515515
// pointer to start of tuple (could pass length, but then could use len(x) for that)
516516
mp_uint_t len;
517517
mp_obj_t *items;
518-
mp_obj_tuple_get(obj, &len, &items);
519-
return (mp_uint_t)items;
520-
} else if (type == &mp_type_list) {
521-
// pointer to start of list (could pass length, but then could use len(x) for that)
522-
mp_uint_t len;
523-
mp_obj_t *items;
524-
mp_obj_list_get(obj, &len, &items);
518+
mp_obj_get_array(obj, &len, &items);
525519
return (mp_uint_t)items;
526520
} else {
527521
mp_buffer_info_t bufinfo;

py/objstr.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -430,16 +430,13 @@ STATIC mp_obj_t str_join(mp_obj_t self_in, mp_obj_t arg) {
430430
// process args
431431
mp_uint_t seq_len;
432432
mp_obj_t *seq_items;
433-
if (MP_OBJ_IS_TYPE(arg, &mp_type_tuple)) {
434-
mp_obj_tuple_get(arg, &seq_len, &seq_items);
435-
} else {
436-
if (!MP_OBJ_IS_TYPE(arg, &mp_type_list)) {
437-
// arg is not a list, try to convert it to one
438-
// TODO: Try to optimize?
439-
arg = mp_type_list.make_new(&mp_type_list, 1, 0, &arg);
440-
}
441-
mp_obj_list_get(arg, &seq_len, &seq_items);
433+
434+
if (!MP_OBJ_IS_TYPE(arg, &mp_type_list) && !MP_OBJ_IS_TYPE(arg, &mp_type_tuple)) {
435+
// arg is not a list nor a tuple, try to convert it to a list
436+
// TODO: Try to optimize?
437+
arg = mp_type_list.make_new(&mp_type_list, 1, 0, &arg);
442438
}
439+
mp_obj_get_array(arg, &seq_len, &seq_items);
443440

444441
// count required length
445442
size_t required_len = 0;

py/runtime.c

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -797,11 +797,7 @@ void mp_unpack_sequence(mp_obj_t seq_in, size_t num, mp_obj_t *items) {
797797
mp_uint_t seq_len;
798798
if (MP_OBJ_IS_TYPE(seq_in, &mp_type_tuple) || MP_OBJ_IS_TYPE(seq_in, &mp_type_list)) {
799799
mp_obj_t *seq_items;
800-
if (MP_OBJ_IS_TYPE(seq_in, &mp_type_tuple)) {
801-
mp_obj_tuple_get(seq_in, &seq_len, &seq_items);
802-
} else {
803-
mp_obj_list_get(seq_in, &seq_len, &seq_items);
804-
}
800+
mp_obj_get_array(seq_in, &seq_len, &seq_items);
805801
if (seq_len < num) {
806802
goto too_short;
807803
} else if (seq_len > num) {
@@ -851,11 +847,7 @@ void mp_unpack_ex(mp_obj_t seq_in, size_t num_in, mp_obj_t *items) {
851847
mp_uint_t seq_len;
852848
if (MP_OBJ_IS_TYPE(seq_in, &mp_type_tuple) || MP_OBJ_IS_TYPE(seq_in, &mp_type_list)) {
853849
mp_obj_t *seq_items;
854-
if (MP_OBJ_IS_TYPE(seq_in, &mp_type_tuple)) {
855-
mp_obj_tuple_get(seq_in, &seq_len, &seq_items);
856-
} else {
857-
mp_obj_list_get(seq_in, &seq_len, &seq_items);
858-
}
850+
mp_obj_get_array(seq_in, &seq_len, &seq_items);
859851
if (seq_len < num_left + num_right) {
860852
goto too_short;
861853
}

0 commit comments

Comments
 (0)