py: Rename mp_obj_int_get to mp_obj_int_get_truncated; fix struct.pack.
mp_obj_int_get_truncated is used as a "fast path" int accessor that doesn't check for overflow and returns the int truncated to the machine word size, ie mp_int_t. Use mp_obj_int_get_truncated to fix struct.pack when packing maximum word sized values. Addresses issues #779 and #998.
This commit is contained in:
@@ -252,7 +252,12 @@ void mp_binary_set_val(char struct_type, char val_type, mp_obj_t val_in, byte **
|
||||
val = (mp_uint_t)val_in;
|
||||
break;
|
||||
default:
|
||||
val = mp_obj_get_int(val_in);
|
||||
// we handle large ints here by calling the truncated accessor
|
||||
if (MP_OBJ_IS_TYPE(val_in, &mp_type_int)) {
|
||||
val = mp_obj_int_get_truncated(val_in);
|
||||
} else {
|
||||
val = mp_obj_get_int(val_in);
|
||||
}
|
||||
}
|
||||
|
||||
mp_binary_set_int(MIN(size, sizeof(val)), struct_type == '>', p, val);
|
||||
|
||||
Reference in New Issue
Block a user