Skip to content

Commit c88cfe1

Browse files
committed
py: Use size_t as len argument and return type of mp_get_index.
These values are used to compute memory addresses and so size_t is the more appropriate type to use.
1 parent 3f3df43 commit c88cfe1

9 files changed

Lines changed: 17 additions & 15 deletions

File tree

py/obj.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ void mp_obj_get_array_fixed_n(mp_obj_t o, mp_uint_t len, mp_obj_t **items) {
351351
}
352352

353353
// is_slice determines whether the index is a slice index
354-
mp_uint_t mp_get_index(const mp_obj_type_t *type, mp_uint_t len, mp_obj_t index, bool is_slice) {
354+
size_t mp_get_index(const mp_obj_type_t *type, size_t len, mp_obj_t index, bool is_slice) {
355355
mp_int_t i;
356356
if (MP_OBJ_IS_SMALL_INT(index)) {
357357
i = MP_OBJ_SMALL_INT_VALUE(index);
@@ -384,7 +384,9 @@ mp_uint_t mp_get_index(const mp_obj_type_t *type, mp_uint_t len, mp_obj_t index,
384384
}
385385
}
386386
}
387-
return i;
387+
388+
// By this point 0 <= i <= len and so fits in a size_t
389+
return (size_t)i;
388390
}
389391

390392
mp_obj_t mp_obj_id(mp_obj_t o_in) {

py/obj.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,7 @@ void mp_obj_get_complex(mp_obj_t self_in, mp_float_t *real, mp_float_t *imag);
674674
//qstr mp_obj_get_qstr(mp_obj_t arg);
675675
void mp_obj_get_array(mp_obj_t o, mp_uint_t *len, mp_obj_t **items); // *items may point inside a GC block
676676
void mp_obj_get_array_fixed_n(mp_obj_t o, mp_uint_t len, mp_obj_t **items); // *items may point inside a GC block
677-
mp_uint_t mp_get_index(const mp_obj_type_t *type, mp_uint_t len, mp_obj_t index, bool is_slice);
677+
size_t mp_get_index(const mp_obj_type_t *type, size_t len, mp_obj_t index, bool is_slice);
678678
mp_obj_t mp_obj_id(mp_obj_t o_in);
679679
mp_obj_t mp_obj_len(mp_obj_t o_in);
680680
mp_obj_t mp_obj_len_maybe(mp_obj_t o_in); // may return MP_OBJ_NULL

py/objarray.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value
471471
return MP_OBJ_FROM_PTR(res);
472472
#endif
473473
} else {
474-
mp_uint_t index = mp_get_index(o->base.type, o->len, index_in, false);
474+
size_t index = mp_get_index(o->base.type, o->len, index_in, false);
475475
#if MICROPY_PY_BUILTINS_MEMORYVIEW
476476
if (o->base.type == &mp_type_memoryview) {
477477
index += o->free;

py/objlist.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ STATIC mp_obj_t list_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
186186
return MP_OBJ_FROM_PTR(res);
187187
}
188188
#endif
189-
mp_uint_t index_val = mp_get_index(self->base.type, self->len, index, false);
189+
size_t index_val = mp_get_index(self->base.type, self->len, index, false);
190190
return self->items[index_val];
191191
} else {
192192
#if MICROPY_PY_BUILTINS_SLICE
@@ -268,7 +268,7 @@ STATIC mp_obj_t list_pop(size_t n_args, const mp_obj_t *args) {
268268
if (self->len == 0) {
269269
mp_raise_msg(&mp_type_IndexError, "pop from empty list");
270270
}
271-
mp_uint_t index = mp_get_index(self->base.type, self->len, n_args == 1 ? MP_OBJ_NEW_SMALL_INT(-1) : args[1], false);
271+
size_t index = mp_get_index(self->base.type, self->len, n_args == 1 ? MP_OBJ_NEW_SMALL_INT(-1) : args[1], false);
272272
mp_obj_t ret = self->items[index];
273273
self->len -= 1;
274274
memmove(self->items + index, self->items + index + 1, (self->len - index) * sizeof(mp_obj_t));
@@ -490,7 +490,7 @@ void mp_obj_list_set_len(mp_obj_t self_in, size_t len) {
490490

491491
void mp_obj_list_store(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
492492
mp_obj_list_t *self = MP_OBJ_TO_PTR(self_in);
493-
mp_uint_t i = mp_get_index(self->base.type, self->len, index, false);
493+
size_t i = mp_get_index(self->base.type, self->len, index, false);
494494
self->items[i] = value;
495495
}
496496

py/objrange.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ STATIC mp_obj_t range_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
155155
return MP_OBJ_FROM_PTR(o);
156156
}
157157
#endif
158-
uint index_val = mp_get_index(self->base.type, len, index, false);
158+
size_t index_val = mp_get_index(self->base.type, len, index, false);
159159
return MP_OBJ_NEW_SMALL_INT(self->start + index_val * self->step);
160160
} else {
161161
return MP_OBJ_NULL; // op not supported

py/objstr.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ mp_obj_t mp_obj_str_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
388388
// objstrunicode defines own version
389389
const byte *str_index_to_ptr(const mp_obj_type_t *type, const byte *self_data, size_t self_len,
390390
mp_obj_t index, bool is_slice) {
391-
mp_uint_t index_val = mp_get_index(type, self_len, index, is_slice);
391+
size_t index_val = mp_get_index(type, self_len, index, is_slice);
392392
return self_data + index_val;
393393
}
394394
#endif
@@ -408,7 +408,7 @@ STATIC mp_obj_t bytes_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
408408
return mp_obj_new_str_of_type(type, self_data + slice.start, slice.stop - slice.start);
409409
}
410410
#endif
411-
mp_uint_t index_val = mp_get_index(type, self_len, index, false);
411+
size_t index_val = mp_get_index(type, self_len, index, false);
412412
// If we have unicode enabled the type will always be bytes, so take the short cut.
413413
if (MICROPY_PY_BUILTINS_STR_UNICODE || type == &mp_type_bytes) {
414414
return MP_OBJ_NEW_SMALL_INT(self_data[index_val]);

py/objstrunicode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ const byte *str_index_to_ptr(const mp_obj_type_t *type, const byte *self_data, s
120120
// so it must handle bytes.
121121
if (type == &mp_type_bytes) {
122122
// Taken from objstr.c:str_index_to_ptr()
123-
mp_uint_t index_val = mp_get_index(type, self_len, index, is_slice);
123+
size_t index_val = mp_get_index(type, self_len, index, is_slice);
124124
return self_data + index_val;
125125
}
126126

py/objtuple.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ mp_obj_t mp_obj_tuple_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
186186
return MP_OBJ_FROM_PTR(res);
187187
}
188188
#endif
189-
mp_uint_t index_value = mp_get_index(self->base.type, self->len, index, false);
189+
size_t index_value = mp_get_index(self->base.type, self->len, index, false);
190190
return self->items[index_value];
191191
} else {
192192
return MP_OBJ_NULL; // op not supported

py/sequence.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ bool mp_seq_cmp_objs(mp_uint_t op, const mp_obj_t *items1, mp_uint_t len1, const
239239
mp_obj_t mp_seq_index_obj(const mp_obj_t *items, mp_uint_t len, mp_uint_t n_args, const mp_obj_t *args) {
240240
mp_obj_type_t *type = mp_obj_get_type(args[0]);
241241
mp_obj_t value = args[1];
242-
uint start = 0;
243-
uint stop = len;
242+
size_t start = 0;
243+
size_t stop = len;
244244

245245
if (n_args >= 3) {
246246
start = mp_get_index(type, len, args[2], true);
@@ -249,7 +249,7 @@ mp_obj_t mp_seq_index_obj(const mp_obj_t *items, mp_uint_t len, mp_uint_t n_args
249249
}
250250
}
251251

252-
for (mp_uint_t i = start; i < stop; i++) {
252+
for (size_t i = start; i < stop; i++) {
253253
if (mp_obj_equal(items[i], value)) {
254254
// Common sense says this cannot overflow small int
255255
return MP_OBJ_NEW_SMALL_INT(i);

0 commit comments

Comments
 (0)