@@ -124,24 +124,24 @@ STATIC NORETURN void syntax_error(void) {
124124STATIC mp_obj_t uctypes_struct_make_new (mp_obj_t type_in , mp_uint_t n_args , mp_uint_t n_kw , const mp_obj_t * args ) {
125125 mp_arg_check_num (n_args , n_kw , 2 , 3 , false);
126126 mp_obj_uctypes_struct_t * o = m_new_obj (mp_obj_uctypes_struct_t );
127- o -> base .type = type_in ;
128- o -> addr = (void * )mp_obj_get_int (args [0 ]);
127+ o -> base .type = MP_OBJ_TO_PTR ( type_in ) ;
128+ o -> addr = (void * )( uintptr_t ) mp_obj_get_int (args [0 ]);
129129 o -> desc = args [1 ];
130130 o -> flags = LAYOUT_NATIVE ;
131131 if (n_args == 3 ) {
132132 o -> flags = mp_obj_get_int (args [2 ]);
133133 }
134- return o ;
134+ return MP_OBJ_FROM_PTR ( o ) ;
135135}
136136
137137STATIC void uctypes_struct_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
138138 (void )kind ;
139- mp_obj_uctypes_struct_t * self = self_in ;
139+ mp_obj_uctypes_struct_t * self = MP_OBJ_TO_PTR ( self_in ) ;
140140 const char * typen = "unk" ;
141141 if (MP_OBJ_IS_TYPE (self -> desc , & mp_type_dict )) {
142142 typen = "STRUCT" ;
143143 } else if (MP_OBJ_IS_TYPE (self -> desc , & mp_type_tuple )) {
144- mp_obj_tuple_t * t = ( mp_obj_tuple_t * ) self -> desc ;
144+ mp_obj_tuple_t * t = MP_OBJ_TO_PTR ( self -> desc ) ;
145145 mp_int_t offset = MP_OBJ_SMALL_INT_VALUE (t -> items [0 ]);
146146 uint agg_type = GET_TYPE (offset , AGG_TYPE_BITS );
147147 switch (agg_type ) {
@@ -207,12 +207,9 @@ STATIC mp_uint_t uctypes_struct_agg_size(mp_obj_tuple_t *t, mp_uint_t *max_field
207207}
208208
209209STATIC mp_uint_t uctypes_struct_size (mp_obj_t desc_in , mp_uint_t * max_field_size ) {
210- mp_obj_dict_t * d = desc_in ;
211- mp_uint_t total_size = 0 ;
212-
213210 if (!MP_OBJ_IS_TYPE (desc_in , & mp_type_dict )) {
214211 if (MP_OBJ_IS_TYPE (desc_in , & mp_type_tuple )) {
215- return uctypes_struct_agg_size ((mp_obj_tuple_t * )desc_in , max_field_size );
212+ return uctypes_struct_agg_size ((mp_obj_tuple_t * )MP_OBJ_TO_PTR ( desc_in ) , max_field_size );
216213 } else if (MP_OBJ_IS_SMALL_INT (desc_in )) {
217214 // We allow sizeof on both type definitions and structures/structure fields,
218215 // but scalar structure field is lowered into native Python int, so all
@@ -223,6 +220,9 @@ STATIC mp_uint_t uctypes_struct_size(mp_obj_t desc_in, mp_uint_t *max_field_size
223220 syntax_error ();
224221 }
225222
223+ mp_obj_dict_t * d = MP_OBJ_TO_PTR (desc_in );
224+ mp_uint_t total_size = 0 ;
225+
226226 for (mp_uint_t i = 0 ; i < d -> map .alloc ; i ++ ) {
227227 if (MP_MAP_SLOT_IS_FILLED (& d -> map , i )) {
228228 mp_obj_t v = d -> map .table [i ].value ;
@@ -241,7 +241,7 @@ STATIC mp_uint_t uctypes_struct_size(mp_obj_t desc_in, mp_uint_t *max_field_size
241241 if (!MP_OBJ_IS_TYPE (v , & mp_type_tuple )) {
242242 syntax_error ();
243243 }
244- mp_obj_tuple_t * t = ( mp_obj_tuple_t * ) v ;
244+ mp_obj_tuple_t * t = MP_OBJ_TO_PTR ( v ) ;
245245 mp_int_t offset = MP_OBJ_SMALL_INT_VALUE (t -> items [0 ]);
246246 offset &= VALUE_MASK (AGG_TYPE_BITS );
247247 mp_uint_t s = uctypes_struct_agg_size (t , max_field_size );
@@ -266,7 +266,7 @@ STATIC mp_obj_t uctypes_struct_sizeof(mp_obj_t obj_in) {
266266 // or to instantiated structure
267267 if (MP_OBJ_IS_TYPE (obj_in , & uctypes_struct_type )) {
268268 // Extract structure definition
269- mp_obj_uctypes_struct_t * obj = obj_in ;
269+ mp_obj_uctypes_struct_t * obj = MP_OBJ_TO_PTR ( obj_in ) ;
270270 obj_in = obj -> desc ;
271271 }
272272 mp_uint_t size = uctypes_struct_size (obj_in , & max_field_size );
@@ -365,7 +365,7 @@ STATIC void set_aligned(uint val_type, void *p, mp_int_t index, mp_obj_t val) {
365365}
366366
367367STATIC mp_obj_t uctypes_struct_attr_op (mp_obj_t self_in , qstr attr , mp_obj_t set_val ) {
368- mp_obj_uctypes_struct_t * self = self_in ;
368+ mp_obj_uctypes_struct_t * self = MP_OBJ_TO_PTR ( self_in ) ;
369369
370370 // TODO: Support at least OrderedDict in addition
371371 if (!MP_OBJ_IS_TYPE (self -> desc , & mp_type_dict )) {
@@ -443,7 +443,7 @@ STATIC mp_obj_t uctypes_struct_attr_op(mp_obj_t self_in, qstr attr, mp_obj_t set
443443 syntax_error ();
444444 }
445445
446- mp_obj_tuple_t * sub = ( mp_obj_tuple_t * ) deref ;
446+ mp_obj_tuple_t * sub = MP_OBJ_TO_PTR ( deref ) ;
447447 mp_int_t offset = MP_OBJ_SMALL_INT_VALUE (sub -> items [0 ]);
448448 mp_uint_t agg_type = GET_TYPE (offset , AGG_TYPE_BITS );
449449 offset &= VALUE_MASK (AGG_TYPE_BITS );
@@ -456,7 +456,7 @@ STATIC mp_obj_t uctypes_struct_attr_op(mp_obj_t self_in, qstr attr, mp_obj_t set
456456 o -> desc = sub -> items [1 ];
457457 o -> addr = self -> addr + offset ;
458458 o -> flags = self -> flags ;
459- return o ;
459+ return MP_OBJ_FROM_PTR ( o ) ;
460460 }
461461 case ARRAY : {
462462 mp_uint_t dummy ;
@@ -468,11 +468,11 @@ STATIC mp_obj_t uctypes_struct_attr_op(mp_obj_t self_in, qstr attr, mp_obj_t set
468468 case PTR : {
469469 mp_obj_uctypes_struct_t * o = m_new_obj (mp_obj_uctypes_struct_t );
470470 o -> base .type = & uctypes_struct_type ;
471- o -> desc = sub ;
471+ o -> desc = MP_OBJ_FROM_PTR ( sub ) ;
472472 o -> addr = self -> addr + offset ;
473473 o -> flags = self -> flags ;
474474//printf("PTR/ARR base addr=%p\n", o->addr);
475- return o ;
475+ return MP_OBJ_FROM_PTR ( o ) ;
476476 }
477477 }
478478
@@ -494,7 +494,7 @@ STATIC void uctypes_struct_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
494494}
495495
496496STATIC mp_obj_t uctypes_struct_subscr (mp_obj_t self_in , mp_obj_t index_in , mp_obj_t value ) {
497- mp_obj_uctypes_struct_t * self = self_in ;
497+ mp_obj_uctypes_struct_t * self = MP_OBJ_TO_PTR ( self_in ) ;
498498
499499 if (value == MP_OBJ_NULL ) {
500500 // delete
@@ -505,7 +505,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
505505 nlr_raise (mp_obj_new_exception_msg (& mp_type_TypeError , "struct: cannot index" ));
506506 }
507507
508- mp_obj_tuple_t * t = ( mp_obj_tuple_t * ) self -> desc ;
508+ mp_obj_tuple_t * t = MP_OBJ_TO_PTR ( self -> desc ) ;
509509 mp_int_t offset = MP_OBJ_SMALL_INT_VALUE (t -> items [0 ]);
510510 uint agg_type = GET_TYPE (offset , AGG_TYPE_BITS );
511511
@@ -530,7 +530,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
530530 o -> desc = t -> items [2 ];
531531 o -> addr = self -> addr + size * index ;
532532 o -> flags = self -> flags ;
533- return o ;
533+ return MP_OBJ_FROM_PTR ( o ) ;
534534 }
535535 } else if (agg_type == PTR ) {
536536 byte * p = * (void * * )self -> addr ;
@@ -545,7 +545,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
545545 o -> desc = t -> items [1 ];
546546 o -> addr = p + size * index ;
547547 o -> flags = self -> flags ;
548- return o ;
548+ return MP_OBJ_FROM_PTR ( o ) ;
549549 }
550550 }
551551
@@ -559,7 +559,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
559559
560560STATIC mp_int_t uctypes_get_buffer (mp_obj_t self_in , mp_buffer_info_t * bufinfo , mp_uint_t flags ) {
561561 (void )flags ;
562- mp_obj_uctypes_struct_t * self = self_in ;
562+ mp_obj_uctypes_struct_t * self = MP_OBJ_TO_PTR ( self_in ) ;
563563 mp_uint_t max_field_size = 0 ;
564564 mp_uint_t size = uctypes_struct_size (self -> desc , & max_field_size );
565565
@@ -575,7 +575,7 @@ STATIC mp_int_t uctypes_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo,
575575STATIC mp_obj_t uctypes_struct_addressof (mp_obj_t buf ) {
576576 mp_buffer_info_t bufinfo ;
577577 mp_get_buffer_raise (buf , & bufinfo , MP_BUFFER_READ );
578- return mp_obj_new_int ((mp_int_t )bufinfo .buf );
578+ return mp_obj_new_int ((mp_int_t )( uintptr_t ) bufinfo .buf );
579579}
580580MP_DEFINE_CONST_FUN_OBJ_1 (uctypes_struct_addressof_obj , uctypes_struct_addressof );
581581
@@ -584,7 +584,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(uctypes_struct_addressof_obj, uctypes_struct_addressof
584584/// captured by reference (and thus memory pointed by bytearray may change
585585/// or become invalid at later time). Use bytes_at() to capture by value.
586586STATIC mp_obj_t uctypes_struct_bytearray_at (mp_obj_t ptr , mp_obj_t size ) {
587- return mp_obj_new_bytearray_by_ref (mp_obj_int_get_truncated (size ), (void * )mp_obj_int_get_truncated (ptr ));
587+ return mp_obj_new_bytearray_by_ref (mp_obj_int_get_truncated (size ), (void * )( uintptr_t ) mp_obj_int_get_truncated (ptr ));
588588}
589589MP_DEFINE_CONST_FUN_OBJ_2 (uctypes_struct_bytearray_at_obj , uctypes_struct_bytearray_at );
590590
@@ -593,7 +593,7 @@ MP_DEFINE_CONST_FUN_OBJ_2(uctypes_struct_bytearray_at_obj, uctypes_struct_bytear
593593/// captured by value, i.e. copied. Use bytearray_at() to capture by reference
594594/// ("zero copy").
595595STATIC mp_obj_t uctypes_struct_bytes_at (mp_obj_t ptr , mp_obj_t size ) {
596- return mp_obj_new_bytes ((void * )mp_obj_int_get_truncated (ptr ), mp_obj_int_get_truncated (size ));
596+ return mp_obj_new_bytes ((void * )( uintptr_t ) mp_obj_int_get_truncated (ptr ), mp_obj_int_get_truncated (size ));
597597}
598598MP_DEFINE_CONST_FUN_OBJ_2 (uctypes_struct_bytes_at_obj , uctypes_struct_bytes_at );
599599
0 commit comments