Skip to content

Commit eb54e4d

Browse files
committed
py/obj: Add warning note about get_array return value and GC blocks.
1 parent 2c2fc07 commit eb54e4d

2 files changed

Lines changed: 4 additions & 2 deletions

File tree

py/obj.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) {
317317
#endif
318318
#endif
319319

320+
// note: returned value in *items may point to the interior of a GC block
320321
void mp_obj_get_array(mp_obj_t o, mp_uint_t *len, mp_obj_t **items) {
321322
if (MP_OBJ_IS_TYPE(o, &mp_type_tuple)) {
322323
mp_obj_tuple_get(o, len, items);
@@ -333,6 +334,7 @@ void mp_obj_get_array(mp_obj_t o, mp_uint_t *len, mp_obj_t **items) {
333334
}
334335
}
335336

337+
// note: returned value in *items may point to the interior of a GC block
336338
void mp_obj_get_array_fixed_n(mp_obj_t o, mp_uint_t len, mp_obj_t **items) {
337339
mp_uint_t seq_len;
338340
mp_obj_get_array(o, &seq_len, items);

py/obj.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -651,8 +651,8 @@ mp_float_t mp_obj_get_float(mp_obj_t self_in);
651651
void mp_obj_get_complex(mp_obj_t self_in, mp_float_t *real, mp_float_t *imag);
652652
#endif
653653
//qstr mp_obj_get_qstr(mp_obj_t arg);
654-
void mp_obj_get_array(mp_obj_t o, mp_uint_t *len, mp_obj_t **items);
655-
void mp_obj_get_array_fixed_n(mp_obj_t o, mp_uint_t len, mp_obj_t **items);
654+
void mp_obj_get_array(mp_obj_t o, mp_uint_t *len, mp_obj_t **items); // *items may point inside a GC block
655+
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
656656
mp_uint_t mp_get_index(const mp_obj_type_t *type, mp_uint_t len, mp_obj_t index, bool is_slice);
657657
mp_obj_t mp_obj_id(mp_obj_t o_in);
658658
mp_obj_t mp_obj_len(mp_obj_t o_in);

0 commit comments

Comments
 (0)