@@ -69,11 +69,13 @@ size_t mp_binary_get_size(char struct_type, char val_type, size_t *palign) {
69
69
case 'Q' :
70
70
size = 8 ;
71
71
break ;
72
+ #if MICROPY_PY_STRUCT_UNSAFE_TYPECODES
72
73
case 'P' :
73
74
case 'O' :
74
75
case 'S' :
75
76
size = sizeof (void * );
76
77
break ;
78
+ #endif
77
79
case 'e' :
78
80
size = 2 ;
79
81
break ;
@@ -119,12 +121,14 @@ size_t mp_binary_get_size(char struct_type, char val_type, size_t *palign) {
119
121
align = alignof(long long );
120
122
size = sizeof (long long );
121
123
break ;
124
+ #if MICROPY_PY_STRUCT_UNSAFE_TYPECODES
122
125
case 'P' :
123
126
case 'O' :
124
127
case 'S' :
125
128
align = alignof(void * );
126
129
size = sizeof (void * );
127
130
break ;
131
+ #endif
128
132
case 'e' :
129
133
align = 2 ;
130
134
size = 2 ;
@@ -280,12 +284,14 @@ mp_obj_t mp_binary_get_val_array(char typecode, void *p, size_t index) {
280
284
case 'd' :
281
285
return mp_obj_new_float_from_d (((double * )p )[index ]);
282
286
#endif
283
- // Extension to CPython: array of objects
287
+ // Extension to CPython: array of objects
288
+ #if MICROPY_PY_STRUCT_UNSAFE_TYPECODES
284
289
case 'O' :
285
290
return ((mp_obj_t * )p )[index ];
286
291
// Extension to CPython: array of pointers
287
292
case 'P' :
288
293
return mp_obj_new_int ((mp_int_t )(uintptr_t )((void * * )p )[index ]);
294
+ #endif
289
295
}
290
296
return MP_OBJ_NEW_SMALL_INT (val );
291
297
}
@@ -334,9 +340,9 @@ mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte *p_base, byte *
334
340
335
341
long long val = mp_binary_get_int (size , is_signed (val_type ), (struct_type == '>' ), p );
336
342
337
- if (val_type == 'O' ) {
343
+ if (MICROPY_PY_STRUCT_UNSAFE_TYPECODES && val_type == 'O' ) {
338
344
return (mp_obj_t )(mp_uint_t )val ;
339
- } else if (val_type == 'S' ) {
345
+ } else if (MICROPY_PY_STRUCT_UNSAFE_TYPECODES && val_type == 'S' ) {
340
346
const char * s_val = (const char * )(uintptr_t )(mp_uint_t )val ;
341
347
return mp_obj_new_str_from_cstr (s_val );
342
348
#if MICROPY_PY_BUILTINS_FLOAT
@@ -407,9 +413,11 @@ void mp_binary_set_val(char struct_type, char val_type, mp_obj_t val_in, byte *p
407
413
408
414
mp_uint_t val ;
409
415
switch (val_type ) {
416
+ #if MICROPY_PY_STRUCT_UNSAFE_TYPECODES
410
417
case 'O' :
411
418
val = (mp_uint_t )val_in ;
412
419
break ;
420
+ #endif
413
421
#if MICROPY_PY_BUILTINS_FLOAT
414
422
case 'e' :
415
423
val = mp_encode_half_float (mp_obj_get_float_to_f (val_in ));
@@ -474,10 +482,12 @@ void mp_binary_set_val_array(char typecode, void *p, size_t index, mp_obj_t val_
474
482
((double * )p )[index ] = mp_obj_get_float_to_d (val_in );
475
483
break ;
476
484
#endif
485
+ #if MICROPY_PY_STRUCT_UNSAFE_TYPECODES
477
486
// Extension to CPython: array of objects
478
487
case 'O' :
479
488
((mp_obj_t * )p )[index ] = val_in ;
480
489
break ;
490
+ #endif
481
491
default :
482
492
#if MICROPY_LONGINT_IMPL != MICROPY_LONGINT_IMPL_NONE
483
493
if (mp_obj_is_exact_type (val_in , & mp_type_int )) {
@@ -534,9 +544,11 @@ void mp_binary_set_val_array_from_int(char typecode, void *p, size_t index, mp_i
534
544
((double * )p )[index ] = (double )val ;
535
545
break ;
536
546
#endif
537
- // Extension to CPython: array of pointers
547
+ // Extension to CPython: array of pointers
548
+ #if MICROPY_PY_STRUCT_UNSAFE_TYPECODES
538
549
case 'P' :
539
550
((void * * )p )[index ] = (void * )(uintptr_t )val ;
540
551
break ;
552
+ #endif
541
553
}
542
554
}
0 commit comments