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.
pull/852/head
Paul Sokolovsky 2014-09-06 19:17:23 +03:00
rodzic 17598d49e1
commit 722e562736
3 zmienionych plików z 13 dodań i 9 usunięć

Wyświetl plik

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

Wyświetl plik

@ -52,7 +52,7 @@
#if MICROPY_PY_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
mp_int_t mp_obj_int_hash(mp_obj_t self_in) {

Wyświetl plik

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