@@ -483,28 +483,30 @@ MP_DEFINE_CONST_FUN_OBJ_1(int_bit_length_obj, int_bit_length);
483
483
STATIC mp_obj_t int_from_bytes (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
484
484
// TODO: Support signed param (assumes signed=False at the moment)
485
485
486
- enum { ARG_signed };
486
+ enum { ARG_bytes , ARG_byteorder , ARG_signed };
487
487
static const mp_arg_t allowed_args [] = {
488
- { MP_QSTR_signed , MP_ARG_KW_ONLY | MP_ARG_BOOL , {.u_bool = false} },
488
+ { MP_QSTR_bytes , MP_ARG_REQUIRED | MP_ARG_OBJ },
489
+ { MP_QSTR_byteorder , MP_ARG_REQUIRED | MP_ARG_OBJ },
490
+ { MP_QSTR_signed , MP_ARG_KW_ONLY | MP_ARG_BOOL , {.u_bool = false} },
489
491
};
490
492
mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
491
- mp_arg_parse_all (n_args - 3 , pos_args + 3 , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
493
+ mp_arg_parse_all (n_args - 1 , pos_args + 1 , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
492
494
493
495
if (args [ARG_signed ].u_bool ) {
494
- mp_raise_msg ( & mp_type_NotImplementedError , MP_ERROR_TEXT ("from_bytes() does not implement signed=True" ) );
496
+ mp_raise_NotImplementedError_varg ( MP_ERROR_TEXT ("%q=%q" ), MP_QSTR_signed , MP_QSTR_True );
495
497
}
496
498
497
499
// get the buffer info
498
500
mp_buffer_info_t bufinfo ;
499
- mp_get_buffer_raise (pos_args [ 1 ] , & bufinfo , MP_BUFFER_READ );
501
+ mp_get_buffer_raise (args [ ARG_bytes ]. u_obj , & bufinfo , MP_BUFFER_READ );
500
502
501
503
const byte * buf = (const byte * )bufinfo .buf ;
502
504
int delta = 1 ;
503
- if (pos_args [ 2 ] == MP_OBJ_NEW_QSTR (MP_QSTR_little )) {
505
+ if (args [ ARG_byteorder ]. u_obj == MP_OBJ_NEW_QSTR (MP_QSTR_little )) {
504
506
buf += bufinfo .len - 1 ;
505
507
delta = -1 ;
506
- } else if (pos_args [ 2 ] != MP_OBJ_NEW_QSTR (MP_QSTR_big )) {
507
- mp_raise_ValueError ( MP_ERROR_TEXT ( "byteorder must be 'little' or 'big'" ) );
508
+ } else if (args [ ARG_byteorder ]. u_obj != MP_OBJ_NEW_QSTR (MP_QSTR_big )) {
509
+ mp_arg_error_invalid ( MP_QSTR_byteorder );
508
510
}
509
511
510
512
mp_uint_t value = 0 ;
@@ -513,7 +515,7 @@ STATIC mp_obj_t int_from_bytes(size_t n_args, const mp_obj_t *pos_args, mp_map_t
513
515
#if MICROPY_LONGINT_IMPL != MICROPY_LONGINT_IMPL_NONE
514
516
if (value > (MP_SMALL_INT_MAX >> 8 )) {
515
517
// Result will overflow a small-int so construct a big-int
516
- return mp_obj_int_from_bytes_impl (pos_args [ 2 ] != MP_OBJ_NEW_QSTR (MP_QSTR_little ), bufinfo .len , bufinfo .buf );
518
+ return mp_obj_int_from_bytes_impl (args [ ARG_byteorder ]. u_obj != MP_OBJ_NEW_QSTR (MP_QSTR_little ), bufinfo .len , bufinfo .buf );
517
519
}
518
520
#endif
519
521
value = (value << 8 ) | * buf ;
0 commit comments