py: Correctly set sys.maxsize value for 64-bit.

Type representing signed size doesn't have to be int, so use special value
which defaults to SSIZE_MAX, but as it's not defined by C standard (but rather
by POSIX), allow ports to set it.
This commit is contained in:
Paul Sokolovsky 2014-09-06 19:17:23 +03:00
parent 17598d49e1
commit 722e562736
3 changed files with 13 additions and 9 deletions

View File

@ -448,6 +448,10 @@ typedef double mp_float_t;
#define MP_PLAT_FREE_EXEC(ptr, size) m_del(byte, ptr, size) #define MP_PLAT_FREE_EXEC(ptr, size) m_del(byte, ptr, size)
#endif #endif
#ifndef MP_SSIZE_MAX
#define MP_SSIZE_MAX SSIZE_MAX
#endif
// printf format spec to use for mp_int_t and friends // printf format spec to use for mp_int_t and friends
#ifndef INT_FMT #ifndef INT_FMT
#ifdef __LP64__ #ifdef __LP64__

View File

@ -52,7 +52,7 @@
#if MICROPY_PY_SYS_MAXSIZE #if MICROPY_PY_SYS_MAXSIZE
// Export value for sys.maxsize // Export value for sys.maxsize
const mp_obj_int_t mp_maxsize_obj = {{&mp_type_int}, INT_MAX}; const mp_obj_int_t mp_maxsize_obj = {{&mp_type_int}, MP_SSIZE_MAX};
#endif #endif
mp_int_t mp_obj_int_hash(mp_obj_t self_in) { mp_int_t mp_obj_int_hash(mp_obj_t self_in) {

View File

@ -47,14 +47,14 @@
// Export value for sys.maxsize // Export value for sys.maxsize
#define DIG_MASK ((1L << MPZ_DIG_SIZE) - 1) #define DIG_MASK ((1L << MPZ_DIG_SIZE) - 1)
STATIC const mpz_dig_t maxsize_dig[MPZ_NUM_DIG_FOR_INT] = { STATIC const mpz_dig_t maxsize_dig[MPZ_NUM_DIG_FOR_INT] = {
(INT_MAX >> MPZ_DIG_SIZE * 0) & DIG_MASK, (MP_SSIZE_MAX >> MPZ_DIG_SIZE * 0) & DIG_MASK,
#if (INT_MAX >> MPZ_DIG_SIZE * 0) > DIG_MASK #if (MP_SSIZE_MAX >> MPZ_DIG_SIZE * 0) > DIG_MASK
(INT_MAX >> MPZ_DIG_SIZE * 1) & DIG_MASK, (MP_SSIZE_MAX >> MPZ_DIG_SIZE * 1) & DIG_MASK,
#if (INT_MAX >> MPZ_DIG_SIZE * 1) > DIG_MASK #if (MP_SSIZE_MAX >> MPZ_DIG_SIZE * 1) > DIG_MASK
(INT_MAX >> MPZ_DIG_SIZE * 2) & DIG_MASK, (MP_SSIZE_MAX >> MPZ_DIG_SIZE * 2) & DIG_MASK,
(INT_MAX >> MPZ_DIG_SIZE * 3) & DIG_MASK, (MP_SSIZE_MAX >> MPZ_DIG_SIZE * 3) & DIG_MASK,
(INT_MAX >> MPZ_DIG_SIZE * 4) & DIG_MASK, (MP_SSIZE_MAX >> MPZ_DIG_SIZE * 4) & DIG_MASK,
// (INT_MAX >> MPZ_DIG_SIZE * 5) & DIG_MASK, // (MP_SSIZE_MAX >> MPZ_DIG_SIZE * 5) & DIG_MASK,
#endif #endif
#endif #endif
}; };