py: Implement integer overflow checking for * and << ops.

If operation will overflow, a multi-precision integer is created.
This commit is contained in:
Damien George
2014-03-12 15:38:15 +00:00
parent bb4a43f35c
commit 9d68e9ccdd
5 changed files with 131 additions and 32 deletions

View File

@@ -71,6 +71,12 @@ mp_obj_t mp_obj_new_int_from_long_str(const char *s) {
return mp_const_none;
}
// This is called when an integer larger than a SMALL_INT is needed (although val might still fit in a SMALL_INT)
mp_obj_t mp_obj_new_int_from_ll(long long val) {
nlr_jump(mp_obj_new_exception_msg(&mp_type_OverflowError, "small int overflow"));
return mp_const_none;
}
mp_obj_t mp_obj_new_int_from_uint(machine_uint_t value) {
// SMALL_INT accepts only signed numbers, of one bit less size
// then word size, which totals 2 bits less for unsigned numbers.