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:
Damien George
2014-12-05 23:13:52 +00:00
parent 451a087075
commit be6d8be91e
13 changed files with 37 additions and 20 deletions

View File

@@ -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);