@@ -480,19 +480,31 @@ MP_DEFINE_CONST_FUN_OBJ_1(int_bit_length_obj, int_bit_length);
480
480
#endif
481
481
482
482
// this is a classmethod
483
- STATIC mp_obj_t int_from_bytes (size_t n_args , const mp_obj_t * args ) {
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
- (void )n_args ;
485
+
486
+ enum { ARG_signed };
487
+ static const mp_arg_t allowed_args [] = {
488
+ { MP_QSTR_signed , MP_ARG_KW_ONLY | MP_ARG_BOOL , {.u_bool = false} },
489
+ };
490
+ 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 );
492
+
493
+ if (args [ARG_signed ].u_bool ) {
494
+ mp_raise_msg (& mp_type_NotImplementedError , MP_ERROR_TEXT ("from_bytes() does not implement signed=True" ));
495
+ }
486
496
487
497
// get the buffer info
488
498
mp_buffer_info_t bufinfo ;
489
- mp_get_buffer_raise (args [1 ], & bufinfo , MP_BUFFER_READ );
499
+ mp_get_buffer_raise (pos_args [1 ], & bufinfo , MP_BUFFER_READ );
490
500
491
501
const byte * buf = (const byte * )bufinfo .buf ;
492
502
int delta = 1 ;
493
- if (args [2 ] == MP_OBJ_NEW_QSTR (MP_QSTR_little )) {
503
+ if (pos_args [2 ] == MP_OBJ_NEW_QSTR (MP_QSTR_little )) {
494
504
buf += bufinfo .len - 1 ;
495
505
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'" ));
496
508
}
497
509
498
510
mp_uint_t value = 0 ;
@@ -501,15 +513,15 @@ STATIC mp_obj_t int_from_bytes(size_t n_args, const mp_obj_t *args) {
501
513
#if MICROPY_LONGINT_IMPL != MICROPY_LONGINT_IMPL_NONE
502
514
if (value > (MP_SMALL_INT_MAX >> 8 )) {
503
515
// Result will overflow a small-int so construct a big-int
504
- return mp_obj_int_from_bytes_impl (args [2 ] != MP_OBJ_NEW_QSTR (MP_QSTR_little ), bufinfo .len , bufinfo .buf );
516
+ return mp_obj_int_from_bytes_impl (pos_args [2 ] != MP_OBJ_NEW_QSTR (MP_QSTR_little ), bufinfo .len , bufinfo .buf );
505
517
}
506
518
#endif
507
519
value = (value << 8 ) | * buf ;
508
520
}
509
521
return mp_obj_new_int_from_uint (value );
510
522
}
511
523
512
- STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (int_from_bytes_fun_obj , 3 , 4 , int_from_bytes );
524
+ STATIC MP_DEFINE_CONST_FUN_OBJ_KW (int_from_bytes_fun_obj , 3 , int_from_bytes );
513
525
STATIC MP_DEFINE_CONST_CLASSMETHOD_OBJ (int_from_bytes_obj , MP_ROM_PTR (& int_from_bytes_fun_obj ));
514
526
515
527
STATIC mp_obj_t int_to_bytes (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
0 commit comments