14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef Py_PYPORT_H
24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_PYPORT_H
34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include "pyconfig.h" /* include for defines */
54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Some versions of HP-UX & Solaris need inttypes.h for int32_t,
74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   INT32_MAX, etc. */
84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_INTTYPES_H
94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <inttypes.h>
104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_STDINT_H
134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <stdint.h>
144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/**************************************************************************
174adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoSymbols and macros to supply platform-independent interfaces to basic
184adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoC language & library operations whose spellings vary across platforms.
194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
204adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoPlease try to make documentation here as clear as possible:  by definition,
214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaothe stuff here is trying to illuminate C's darkest corners.
224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
234adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoConfig #defines referenced here:
244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
254adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoSIGNED_RIGHT_SHIFT_ZERO_FILLS
264adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoMeaning:  To be defined iff i>>j does not extend the sign bit when i is a
274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao          signed integral type and i < 0.
284adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoUsed in:  Py_ARITHMETIC_RIGHT_SHIFT
294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
304adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoPy_DEBUG
314adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoMeaning:  Extra checks compiled in for debug mode.
324adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoUsed in:  Py_SAFE_DOWNCAST
334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
344adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoHAVE_UINTPTR_T
354adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoMeaning:  The C9X type uintptr_t is supported by the compiler
364adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoUsed in:  Py_uintptr_t
374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
384adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoHAVE_LONG_LONG
394adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoMeaning:  The compiler supports the C type "long long"
404adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoUsed in:  PY_LONG_LONG
414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao**************************************************************************/
434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* For backward compatibility only. Obsolete, do not use. */
464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_PROTOTYPES
474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_PROTO(x) x
484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_PROTO(x) ()
504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef Py_FPROTO
524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_FPROTO(x) Py_PROTO(x)
534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* typedefs for some C9X-defined synonyms for integral types.
564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * The names in Python are exactly the same as the C9X names, except with a
584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Py_ prefix.  Until C9X is universally implemented, this is the only way
594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * to ensure that Python gets reliable names that don't conflict with names
604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * in non-Python code that are playing their own tricks to define the C9X
614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * names.
624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * NOTE: don't go nuts here!  Python has no use for *most* of the C9X
644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * integral synonyms.  Only define the ones we actually need.
654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_LONG_LONG
684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PY_LONG_LONG
694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_LONG_LONG long long
704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(LLONG_MAX)
714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* If LLONG_MAX is defined in limits.h, use that. */
724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_LLONG_MIN LLONG_MIN
734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_LLONG_MAX LLONG_MAX
744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_ULLONG_MAX ULLONG_MAX
754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#elif defined(__LONG_LONG_MAX__)
764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Otherwise, if GCC has a builtin define, use that. */
774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_LLONG_MAX __LONG_LONG_MAX__
784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_LLONG_MIN (-PY_LLONG_MAX-1)
794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_ULLONG_MAX (__LONG_LONG_MAX__*2ULL + 1ULL)
804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Otherwise, rely on two's complement. */
824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_ULLONG_MAX (~0ULL)
834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_LLONG_MAX  ((long long)(PY_ULLONG_MAX>>1))
844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_LLONG_MIN (-PY_LLONG_MAX-1)
854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* LLONG_MAX */
864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* HAVE_LONG_LONG */
884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* a build with 30-bit digits for Python long integers needs an exact-width
904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 32-bit unsigned integer type to store those digits.  (We could just use
914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * type 'unsigned long', but that would be wasteful on a system where longs
924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * are 64-bits.)  On Unix systems, the autoconf macro AC_TYPE_UINT32_T defines
934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * uint32_t to be such a type unless stdint.h or inttypes.h defines uint32_t.
944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * However, it doesn't set HAVE_UINT32_T, so we do that here.
954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef uint32_t
974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define HAVE_UINT32_T 1
984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_UINT32_T
1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PY_UINT32_T
1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_UINT32_T uint32_t
1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Macros for a 64-bit unsigned integer type; used for type 'twodigits' in the
1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * long integer implementation, when 30-bit digits are enabled.
1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef uint64_t
1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define HAVE_UINT64_T 1
1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_UINT64_T
1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PY_UINT64_T
1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_UINT64_T uint64_t
1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Signed variants of the above */
1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef int32_t
1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define HAVE_INT32_T 1
1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_INT32_T
1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PY_INT32_T
1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_INT32_T int32_t
1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef int64_t
1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define HAVE_INT64_T 1
1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_INT64_T
1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PY_INT64_T
1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_INT64_T int64_t
1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* If PYLONG_BITS_IN_DIGIT is not defined then we'll use 30-bit digits if all
1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   the necessary integer types are available, and we're on a 64-bit platform
1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   (as determined by SIZEOF_VOID_P); otherwise we use 15-bit digits. */
1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PYLONG_BITS_IN_DIGIT
1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if (defined HAVE_UINT64_T && defined HAVE_INT64_T && \
1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao     defined HAVE_UINT32_T && defined HAVE_INT32_T && SIZEOF_VOID_P >= 8)
1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PYLONG_BITS_IN_DIGIT 30
1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PYLONG_BITS_IN_DIGIT 15
1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* uintptr_t is the C9X name for an unsigned integral type such that a
1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * legitimate void* can be cast to uintptr_t and then back to void* again
1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * without loss of information.  Similarly for intptr_t, wrt a signed
1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * integral type.
1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_UINTPTR_T
1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef uintptr_t       Py_uintptr_t;
1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef intptr_t        Py_intptr_t;
1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#elif SIZEOF_VOID_P <= SIZEOF_INT
1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef unsigned int    Py_uintptr_t;
1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef int             Py_intptr_t;
1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#elif SIZEOF_VOID_P <= SIZEOF_LONG
1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef unsigned long   Py_uintptr_t;
1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef long            Py_intptr_t;
1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P <= SIZEOF_LONG_LONG)
1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef unsigned PY_LONG_LONG   Py_uintptr_t;
1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef PY_LONG_LONG            Py_intptr_t;
1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   error "Python needs a typedef for Py_uintptr_t in pyport.h."
1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* HAVE_UINTPTR_T */
1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_ssize_t is a signed integral type such that sizeof(Py_ssize_t) ==
1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * sizeof(size_t).  C99 doesn't define such a thing directly (size_t is an
1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * unsigned integral type).  See PEP 353 for details.
1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_SSIZE_T
1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef ssize_t         Py_ssize_t;
1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#elif SIZEOF_VOID_P == SIZEOF_SIZE_T
1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef Py_intptr_t     Py_ssize_t;
1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   error "Python needs a typedef for Py_ssize_t in pyport.h."
1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Largest possible value of size_t.
1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   SIZE_MAX is part of C99, so it might be defined on some
1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   platforms. If it is not defined, (size_t)-1 is a portable
1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   definition for C89, due to the way signed->unsigned
1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   conversion is defined. */
1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef SIZE_MAX
1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_SIZE_MAX SIZE_MAX
1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_SIZE_MAX ((size_t)-1)
1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Largest positive value of type Py_ssize_t. */
2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Smallest negative value of type Py_ssize_t. */
2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1)
2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*
2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if SIZEOF_PID_T > SIZEOF_LONG
2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   error "Python doesn't support sizeof(pid_t) > sizeof(long)"
2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao*/
2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf
2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * format to convert an argument with the width of a size_t or Py_ssize_t.
2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * C99 introduced "z" for this purpose, but not all platforms support that;
2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * e.g., MS compilers use "I" instead.
2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * These "high level" Python format functions interpret "z" correctly on
2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * all platforms (Python interprets the format string itself, and does whatever
2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * the platform C requires to convert a size_t/Py_ssize_t argument):
2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *     PyString_FromFormat
2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *     PyErr_Format
2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *     PyString_FromFormatV
2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Lower-level uses require that you interpolate the correct format modifier
2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * yourself (e.g., calling printf, fprintf, sprintf, PyOS_snprintf); for
2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * example,
2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *     Py_ssize_t index;
2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *     fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index);
2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * That will expand to %ld, or %Id, or to something else correct for a
2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Py_ssize_t on the platform.
2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PY_FORMAT_SIZE_T
2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__)
2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       define PY_FORMAT_SIZE_T ""
2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   elif SIZEOF_SIZE_T == SIZEOF_LONG
2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       define PY_FORMAT_SIZE_T "l"
2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   elif defined(MS_WINDOWS)
2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       define PY_FORMAT_SIZE_T "I"
2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   elif defined(__MINGW32__) && defined(__USE_MINGW_ANSI_STDIO)
2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       define PY_FORMAT_SIZE_T "z"
2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   else
2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T"
2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   endif
2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* PY_FORMAT_LONG_LONG is analogous to PY_FORMAT_SIZE_T above, but for
2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * the long long type instead of the size_t type.  It's only available
2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * when HAVE_LONG_LONG is defined. The "high level" Python format
2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * functions listed above will interpret "lld" or "llu" correctly on
2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * all platforms.
2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_LONG_LONG
2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   ifndef PY_FORMAT_LONG_LONG
2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       if defined(MS_WIN64) || defined(MS_WINDOWS)
2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#           define PY_FORMAT_LONG_LONG "I64"
2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       else
2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#           error "This platform's pyconfig.h needs to define PY_FORMAT_LONG_LONG"
2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       endif
2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#   endif
2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_LOCAL can be used instead of static to get the fastest possible calling
2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * convention for functions that are local to a given module.
2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Py_LOCAL_INLINE does the same thing, and also explicitly requests inlining,
2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * for platforms that support that.
2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * If PY_LOCAL_AGGRESSIVE is defined before python.h is included, more
2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * "aggressive" inlining/optimizaion is enabled for the entire module.  This
2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * may lead to code bloat, and may slow things down for those reasons.  It may
2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * also lead to errors, if the code relies on pointer aliasing.  Use with
2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * care.
2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * NOTE: You can only use this for functions that are entirely local to a
2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * module; functions that are exported via method tables, callbacks, etc,
2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * should keep using static.
2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef USE_INLINE /* XXX - set via configure? */
2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(_MSC_VER)
2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(PY_LOCAL_AGGRESSIVE)
2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* enable more aggressive optimization for visual studio */
2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#pragma optimize("agtw", on)
2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* ignore warnings if the compiler decides not to inline a function */
2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#pragma warning(disable: 4710)
2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* fastest possible local call under MSVC */
2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_LOCAL(type) static type __fastcall
2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_LOCAL_INLINE(type) static __inline type __fastcall
2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#elif defined(USE_INLINE)
2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_LOCAL(type) static type
2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_LOCAL_INLINE(type) static inline type
2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_LOCAL(type) static type
2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_LOCAL_INLINE(type) static type
3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_MEMCPY can be used instead of memcpy in cases where the copied blocks
3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * are often very short.  While most platforms have highly optimized code for
3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * large transfers, the setup costs for memcpy are often quite high.  MEMCPY
3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * solves this by doing short copies "in line".
3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(_MSC_VER)
3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_MEMCPY(target, source, length) do {                          \
3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        size_t i_, n_ = (length);                                       \
3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        char *t_ = (void*) (target);                                    \
3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        const char *s_ = (void*) (source);                              \
3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if (n_ >= 16)                                                   \
3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            memcpy(t_, s_, n_);                                         \
3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        else                                                            \
3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            for (i_ = 0; i_ < n_; i_++)                                 \
3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                t_[i_] = s_[i_];                                        \
3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    } while (0)
3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_MEMCPY memcpy
3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <stdlib.h>
3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_IEEEFP_H
3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <ieeefp.h>  /* needed for 'finite' declaration on some platforms */
3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <math.h> /* Moved here from the math section, before extern "C" */
3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/********************************************
3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * WRAPPER FOR <time.h> and/or <sys/time.h> *
3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ********************************************/
3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef TIME_WITH_SYS_TIME
3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <sys/time.h>
3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <time.h>
3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else /* !TIME_WITH_SYS_TIME */
3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_SYS_TIME_H
3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <sys/time.h>
3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else /* !HAVE_SYS_TIME_H */
3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <time.h>
3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* !HAVE_SYS_TIME_H */
3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* !TIME_WITH_SYS_TIME */
3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/******************************
3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * WRAPPER FOR <sys/select.h> *
3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ******************************/
3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* NB caller must include <sys/types.h> */
3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_SYS_SELECT_H
3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <sys/select.h>
3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* !HAVE_SYS_SELECT_H */
3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*******************************
3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * stat() and fstat() fiddling *
3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *******************************/
3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* We expect that stat and fstat exist on most systems.
3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *  It's confirmed on Unix, Mac and Windows.
3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *  If you don't have them, add
3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *      #define DONT_HAVE_STAT
3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * and/or
3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *      #define DONT_HAVE_FSTAT
3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * to your pyconfig.h. Python code beyond this should check HAVE_STAT and
3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * HAVE_FSTAT instead.
3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Also
3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *      #define HAVE_SYS_STAT_H
3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * if <sys/stat.h> exists on your platform, and
3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *      #define HAVE_STAT_H
3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * if <stat.h> does.
3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef DONT_HAVE_STAT
3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define HAVE_STAT
3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef DONT_HAVE_FSTAT
3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define HAVE_FSTAT
3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef RISCOS
3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <sys/types.h>
3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include "unixstuff.h"
3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_SYS_STAT_H
3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(PYOS_OS2) && defined(PYCC_GCC)
3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <sys/types.h>
3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <sys/stat.h>
3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#elif defined(HAVE_STAT_H)
3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <stat.h>
3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(PYCC_VACPP)
4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG)
4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef S_ISREG
4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define S_ISREG(x) (((x) & S_IFMT) == S_IFREG)
4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef S_ISDIR
4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR)
4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef __cplusplus
4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Move this down here since some C++ #include's don't like to be included
4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   inside an extern "C" */
4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern "C" {
4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_ARITHMETIC_RIGHT_SHIFT
4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * C doesn't define whether a right-shift of a signed integer sign-extends
4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * or zero-fills.  Here a macro to force sign extension:
4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J)
4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    Return I >> J, forcing sign extension.  Arithmetically, return the
4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    floor of I/2**J.
4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Requirements:
4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    I should have signed integer type.  In the terminology of C99, this can
4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    be either one of the five standard signed integer types (signed char,
4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    short, int, long, long long) or an extended signed integer type.
4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    J is an integer >= 0 and strictly less than the number of bits in the
4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    type of I (because C doesn't define what happens for J outside that
4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    range either).
4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    TYPE used to specify the type of I, but is now ignored.  It's been left
4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    in for backwards compatibility with versions <= 2.6 or 3.0.
4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Caution:
4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    I may be evaluated more than once.
4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef SIGNED_RIGHT_SHIFT_ZERO_FILLS
4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) \
4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    ((I) < 0 ? -1-((-1-(I)) >> (J)) : (I) >> (J))
4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J))
4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_FORCE_EXPANSION(X)
4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * "Simply" returns its argument.  However, macro expansions within the
4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * argument are evaluated.  This unfortunate trickery is needed to get
4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * token-pasting to work as desired in some cases.
4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_FORCE_EXPANSION(X) X
4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW)
4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Cast VALUE to type NARROW from type WIDE.  In Py_DEBUG mode, this
4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * assert-fails if any information is lost.
4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Caution:
4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    VALUE may be evaluated more than once.
4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef Py_DEBUG
4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) \
4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    (assert((WIDE)(NARROW)(VALUE) == (VALUE)), (NARROW)(VALUE))
4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) (NARROW)(VALUE)
4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_SET_ERRNO_ON_MATH_ERROR(x)
4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * If a libm function did not set errno, but it looks like the result
4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * overflowed or not-a-number, set errno to ERANGE or EDOM.  Set errno
4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * to 0 before calling a libm function, and invoke this macro after,
4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * passing the function result.
4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Caution:
4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    This isn't reliable.  See Py_OVERFLOWED comments.
4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    X is evaluated more than once.
4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(__FreeBSD__) || defined(__OpenBSD__) || (defined(__hpux) && defined(__ia64))
4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_EDOM_FOR_NAN(X) if (isnan(X)) errno = EDOM;
4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_EDOM_FOR_NAN(X) ;
4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_SET_ERRNO_ON_MATH_ERROR(X) \
4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    do { \
4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if (errno == 0) { \
4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \
4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                errno = ERANGE; \
4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            else _Py_SET_EDOM_FOR_NAN(X) \
4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        } \
4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    } while(0)
4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_SET_ERANGE_ON_OVERFLOW(x)
4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * An alias of Py_SET_ERRNO_ON_MATH_ERROR for backward-compatibility.
4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_SET_ERANGE_IF_OVERFLOW(X) Py_SET_ERRNO_ON_MATH_ERROR(X)
4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_ADJUST_ERANGE1(x)
4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Py_ADJUST_ERANGE2(x, y)
4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Set errno to 0 before calling a libm function, and invoke one of these
4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * macros after, passing the function result(s) (Py_ADJUST_ERANGE2 is useful
4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * for functions returning complex results).  This makes two kinds of
4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * adjustments to errno:  (A) If it looks like the platform libm set
4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * errno=ERANGE due to underflow, clear errno. (B) If it looks like the
5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * platform libm overflowed but didn't set errno, force errno to ERANGE.  In
5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * effect, we're trying to force a useful implementation of C89 errno
5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * behavior.
5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Caution:
5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    This isn't reliable.  See Py_OVERFLOWED comments.
5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    X and Y may be evaluated more than once.
5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_ADJUST_ERANGE1(X)                                            \
5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    do {                                                                \
5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if (errno == 0) {                                               \
5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL)              \
5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                errno = ERANGE;                                         \
5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        }                                                               \
5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        else if (errno == ERANGE && (X) == 0.0)                         \
5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            errno = 0;                                                  \
5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    } while(0)
5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_ADJUST_ERANGE2(X, Y)                                         \
5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    do {                                                                \
5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL ||                \
5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            (Y) == Py_HUGE_VAL || (Y) == -Py_HUGE_VAL) {                \
5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                        if (errno == 0)                                 \
5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                                errno = ERANGE;                         \
5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        }                                                               \
5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        else if (errno == ERANGE)                                       \
5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            errno = 0;                                                  \
5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    } while(0)
5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*  The functions _Py_dg_strtod and _Py_dg_dtoa in Python/dtoa.c (which are
5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *  required to support the short float repr introduced in Python 3.1) require
5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *  that the floating-point unit that's being used for arithmetic operations
5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *  on C doubles is set to use 53-bit precision.  It also requires that the
5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *  FPU rounding mode is round-half-to-even, but that's less often an issue.
5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *  If your FPU isn't already set to 53-bit precision/round-half-to-even, and
5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *  you want to make use of _Py_dg_strtod and _Py_dg_dtoa, then you should
5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *     #define HAVE_PY_SET_53BIT_PRECISION 1
5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *  and also give appropriate definitions for the following three macros:
5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    _PY_SET_53BIT_PRECISION_START : store original FPU settings, and
5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *        set FPU to 53-bit precision/round-half-to-even
5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    _PY_SET_53BIT_PRECISION_END : restore original FPU settings
5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    _PY_SET_53BIT_PRECISION_HEADER : any variable declarations needed to
5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *        use the two macros above.
5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *
5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * The macros are designed to be used within a single C function: see
5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Python/pystrtod.c for an example of their use.
5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* get and set x87 control word for gcc/x86 */
5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_GCC_ASM_FOR_X87
5534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define HAVE_PY_SET_53BIT_PRECISION 1
5544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* _Py_get/set_387controlword functions are defined in Python/pymath.c */
5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_53BIT_PRECISION_HEADER                          \
5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    unsigned short old_387controlword, new_387controlword
5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_53BIT_PRECISION_START                                   \
5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    do {                                                                \
5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        old_387controlword = _Py_get_387controlword();                  \
5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        new_387controlword = (old_387controlword & ~0x0f00) | 0x0200; \
5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if (new_387controlword != old_387controlword)                   \
5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            _Py_set_387controlword(new_387controlword);                 \
5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    } while (0)
5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_53BIT_PRECISION_END                             \
5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    if (new_387controlword != old_387controlword)               \
5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        _Py_set_387controlword(old_387controlword)
5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* get and set x87 control word for VisualStudio/x86 */
5704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(_MSC_VER) && !defined(_WIN64) /* x87 not supported in 64-bit */
5714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define HAVE_PY_SET_53BIT_PRECISION 1
5724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_53BIT_PRECISION_HEADER \
5734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    unsigned int old_387controlword, new_387controlword, out_387controlword
5744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* We use the __control87_2 function to set only the x87 control word.
5754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   The SSE control word is unaffected. */
5764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_53BIT_PRECISION_START                                   \
5774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    do {                                                                \
5784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        __control87_2(0, 0, &old_387controlword, NULL);                 \
5794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        new_387controlword =                                            \
5804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao          (old_387controlword & ~(_MCW_PC | _MCW_RC)) | (_PC_53 | _RC_NEAR); \
5814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if (new_387controlword != old_387controlword)                   \
5824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            __control87_2(new_387controlword, _MCW_PC | _MCW_RC,        \
5834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          &out_387controlword, NULL);                   \
5844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    } while (0)
5854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_53BIT_PRECISION_END                                     \
5864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    do {                                                                \
5874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if (new_387controlword != old_387controlword)                   \
5884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            __control87_2(old_387controlword, _MCW_PC | _MCW_RC,        \
5894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          &out_387controlword, NULL);                   \
5904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    } while (0)
5914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
5924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* default definitions are empty */
5944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef HAVE_PY_SET_53BIT_PRECISION
5954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_53BIT_PRECISION_HEADER
5964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_53BIT_PRECISION_START
5974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define _Py_SET_53BIT_PRECISION_END
5984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
5994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* If we can't guarantee 53-bit precision, don't use the code
6014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   in Python/dtoa.c, but fall back to standard code.  This
6024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   means that repr of a float will be long (17 sig digits).
6034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   Realistically, there are two things that could go wrong:
6054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   (1) doubles aren't IEEE 754 doubles, or
6074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   (2) we're on x86 with the rounding precision set to 64-bits
6084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao       (extended precision), and we don't know how to change
6094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao       the rounding precision.
6104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
6114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if !defined(DOUBLE_IS_LITTLE_ENDIAN_IEEE754) && \
6134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    !defined(DOUBLE_IS_BIG_ENDIAN_IEEE754) && \
6144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    !defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754)
6154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_NO_SHORT_FLOAT_REPR
6164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
6174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* double rounding is symptomatic of use of extended precision on x86.  If
6194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   we're seeing double rounding, and we don't have any mechanism available for
6204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   changing the FPU rounding precision, then don't use Python/dtoa.c. */
6214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(X87_DOUBLE_ROUNDING) && !defined(HAVE_PY_SET_53BIT_PRECISION)
6224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PY_NO_SHORT_FLOAT_REPR
6234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
6244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Py_DEPRECATED(version)
6264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Declare a variable, type, or function deprecated.
6274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Usage:
6284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    extern int old_var Py_DEPRECATED(2.3);
6294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    typedef int T1 Py_DEPRECATED(2.4);
6304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao *    extern int x() Py_DEPRECATED(2.5);
6314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
6324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(__GNUC__) && ((__GNUC__ >= 4) || \
6334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao              (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))
6344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))
6354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
6364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_DEPRECATED(VERSION_UNUSED)
6374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
6384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/**************************************************************************
6404adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoPrototypes that are missing from the standard include files on some systems
6414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao(and possibly only some versions of such systems.)
6424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6434adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoPlease be conservative with adding new ones, document them and enclose them
6444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoin platform-specific #ifdefs.
6454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao**************************************************************************/
6464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef SOLARIS
6484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Unchecked */
6494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern int gethostname(char *, int);
6504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
6514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef __BEOS__
6534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Unchecked */
6544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* It's in the libs, but not the headers... - [cjh] */
6554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoint shutdown( int, int );
6564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
6574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE__GETPTY
6594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <sys/types.h>          /* we need to import mode_t */
6604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern char * _getpty(int *, int, mode_t, int);
6614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
6624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* On QNX 6, struct termio must be declared by including sys/termio.h
6644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   if TCGETA, TCSETA, TCSETAW, or TCSETAF are used.  sys/termio.h must
6654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   be included before termios.h or it will generate an error. */
6664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(HAVE_SYS_TERMIO_H) && !defined(__hpux)
6674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <sys/termio.h>
6684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
6694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY)
6714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) && !defined(HAVE_UTIL_H)
6724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* BSDI does not supply a prototype for the 'openpty' and 'forkpty'
6734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   functions, even though they are included in libutil. */
6744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <termios.h>
6754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern int openpty(int *, int *, char *, struct termios *, struct winsize *);
6764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern pid_t forkpty(int *, char *, struct termios *, struct winsize *);
6774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) */
6784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */
6794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* These are pulled from various places. It isn't obvious on what platforms
6824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   they are necessary, nor what the exact prototype should look like (which
6834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   is likely to vary between platforms!) If you find you need one of these
6844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   declarations, please move them to a platform-specific block and include
6854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   proper prototypes. */
6864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if 0
6874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* From Modules/resource.c */
6894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern int getrusage();
6904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern int getpagesize();
6914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* From Python/sysmodule.c and Modules/posixmodule.c */
6934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern int fclose(FILE *);
6944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* From Modules/posixmodule.c */
6964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoextern int fdatasync(int);
6974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* 0 */
6984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef __MINGW32__
7014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* FIXME: some of next definitions specific to gcc(mingw build) can be
7024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   generalized on definitions of _WIN32 or WIN32 and to be common for
7034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   all windows build instead explicitly to define only for non-autotools
7044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   based builds (see PC/pyconfig.h for details). */
7054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if !defined(MS_WIN64) && defined(_WIN64)
7064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define MS_WIN64
7074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if !defined(MS_WIN32) && defined(_WIN32)
7094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define MS_WIN32
7104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if !defined(MS_WIN32) && defined(_WIN32)
7124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define MS_WIN32
7134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if !defined(MS_WINDOWS) && defined(MS_WIN32)
7154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define MS_WINDOWS
7164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PYTHONPATH
7194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk"
7204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* python 2.6+ requires Windows 2000 or greater. */
7234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_WINVER 0x0500
7244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_MODULE)
7264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* FIXME if NTDDI_xxx is in use by mingw (see PC/pyconfig.h) */
7274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef WINVER
7284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define WINVER Py_WINVER
7294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef _WIN32_WINNT
7314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define _WIN32_WINNT Py_WINVER
7324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef PLATFORM
7364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*NOTE: if compile getplatform.c PLATFORM is set to MACHDEP that is
7374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  "win" for mingw build (see respective comment in configure.in). */
7384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# undef PLATFORM
7394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* always set to "win32" - see PC/pyconfig.h */
7414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define PLATFORM "win32"
7424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(MS_WIN64)
7444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define SIZEOF_HKEY 8
7454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#elif defined(MS_WIN32)
7464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define SIZEOF_HKEY 4
7474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*NOTE: mingw has isinf as macro defined in math.h.
7504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  Since PC/pyconfig.h define Py_IS_INFINITY(X) that cover HAVE_DECL_ISFINITE
7514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  here for Py_IS_INFINITY we define same as for MSVC build.
7524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  This makes HAVE_DECL_ISFINITE needless.
7534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  Also see commants in configure.in and pymath.h. */
7544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_IS_INFINITY(X) (!_finite(X) && !_isnan(X))
7554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef HAVE_LARGEFILE_SUPPORT
7574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*
7584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  FIXME: on windows platforms:
7594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   - Python use PY_LONG_LONG(!) for Py_off_t (_fileio.c);
7604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   - HAVE_LARGEFILE_SUPPORT is defined in PC/pyconfig.h;
7614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   - PC/pyconfig.h define 4 for SIZEOF_OFF_T and 8 for SIZEOF_FPOS_T;
7624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   - If HAVE_LARGEFILE_SUPPORT isn't defined python will use off_t(!)
7634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   for Py_off_t (see fileobjects.c and bz2module.c).
7644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  Since for mingw configure detect 4 for size of "off_t" and 8 - for
7654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  "fpos_t" we has to define HAVE_LARGEFILE_SUPPORT too.
7664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  TODO: to test with AC_SYS_LARGEFILE and appropriate updates in
7674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  python code.
7684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao*/
7694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define HAVE_LARGEFILE_SUPPORT
7704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(Py_ENABLE_SHARED)
7734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define MS_COREDLL 1 /* deprecated old symbol, but still in use for windows code */
7744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
7754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define MS_NO_COREDLL 1
7764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if Py_UNICODE_SIZE == 2
7794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* For mingw is 2 but FIXME: What about to raise error in configure if
7804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   unicode size isn't two ? Did python windows code support ucs4 ? */
7814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define Py_WIN_WIDE_FILENAMES
7824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
7834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* NOTE: Don't define HAVE_STDDEF_H.
7854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * It is defined by PC/pyconfig.h and used by Include/Python.h
7864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * (with comment For size_t?) but isn't required for mingw  */
7874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE
7884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* All other defines from PC/pyconfig.h are in autoconf generated
7904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   pyconfig.h */
7914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if 0
7924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*FIXME:
7934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  MSDN:
7944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    "The getaddrinfo function was added to the ws2_32.dll on Windows XP
7954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    and later."
7964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  mingw:
7974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    getaddrinfo and getnameinfo is defined for WINVER >= 0x0501.
7984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  PC/pyconfig.h:
7994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    "Python 2.6+ requires Windows 2000 or greater"
8004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  So far so good but socketmodule.h define HAVE_GETADDRINFO and
8014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  HAVE_GETNAMEINFO under very specific condition :
8024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # ifdef SIO_GET_MULTICAST_FILTER
8034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    #  include <MSTcpIP.h>
8044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  So the question is "Separate SDKs" required for w2k in MSVC build ?
8054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  TODO: resolve later, may by configure :-/. For now python code will
8064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  use fake implementation and if user define appropriate value for
8074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  WINVER - the functionas from C runtime.
8084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  For details see socketmodule.c .
8094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  */
8104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef HAVE_GETADDRINFO
8114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define HAVE_GETADDRINFO
8124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
8134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef HAVE_GETNAMEINFO
8144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#  define HAVE_GETNAMEINFO
8154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
8164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
8174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Refer to <Modules/_math.h> .
8194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   For mingw host configure detect functions described as HAVE_XXX
8204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   in _math.h but as MSVC don't define them we will undefine HAVE_XXX
8214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   too to use _Py_* replacements same as MSVC build .
8224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
8234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef HAVE_ACOSH
8244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef HAVE_ASINH
8254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef HAVE_ATANH
8264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef HAVE_EXPM1
8274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef HAVE_LOG1P
8284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /*def __MINGW32__*/
8304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* On 4.4BSD-descendants, ctype functions serves the whole range of
8324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * wchar_t character set rather than single byte code points only.
8334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * This characteristic can break some operations of string object
8344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * including str.upper() and str.split() on UTF-8 locales.  This
8354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * workaround was provided by Tim Robbins of FreeBSD project.
8364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
8374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef __FreeBSD__
8394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <osreldate.h>
8404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if __FreeBSD_version > 500039
8414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# define _PY_PORT_CTYPE_UTF8_ISSUE
8424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
8434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
8444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(__APPLE__)
8474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# define _PY_PORT_CTYPE_UTF8_ISSUE
8484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
8494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef _PY_PORT_CTYPE_UTF8_ISSUE
8514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <ctype.h>
8524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <wctype.h>
8534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef isalnum
8544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define isalnum(c) iswalnum(btowc(c))
8554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef isalpha
8564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define isalpha(c) iswalpha(btowc(c))
8574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef islower
8584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define islower(c) iswlower(btowc(c))
8594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef isspace
8604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define isspace(c) iswspace(btowc(c))
8614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef isupper
8624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define isupper(c) iswupper(btowc(c))
8634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef tolower
8644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define tolower(c) towlower(btowc(c))
8654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#undef toupper
8664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define toupper(c) towupper(btowc(c))
8674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
8684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Declarations for symbol visibility.
8714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  PyAPI_FUNC(type): Declares a public Python API function and return type
8734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  PyAPI_DATA(type): Declares public Python data and its type
8744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  PyMODINIT_FUNC:   A Python module init function.  If these functions are
8754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    inside the Python core, they are private to the core.
8764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    If in an extension module, it may be declared with
8774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    external linkage depending on the platform.
8784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  As a number of platforms support/require "__declspec(dllimport/dllexport)",
8804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  we support a HAVE_DECLSPEC_DLL macro to save duplication.
8814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao*/
8824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*
8844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  MSVC windows port is handled in PC/pyconfig.h.
8854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  BeOS, mingw32 and cygwin use autoconf and require special
8874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao  linkage handling and all of these use __declspec().
8884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao*/
8894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BEOS__)
8904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       define HAVE_DECLSPEC_DLL
8914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
8924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* only get special linkage if built as shared or platform is Cygwin */
8944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__)
8954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       if defined(HAVE_DECLSPEC_DLL)
8964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#               ifdef Py_BUILD_CORE
8974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE
8984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE
8994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        /* module init functions inside the core need no external linkage */
9004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        /* except for Cygwin to handle embedding (FIXME: BeOS too?) */
9014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       if defined(__CYGWIN__)
9024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                               define PyMODINIT_FUNC __declspec(dllexport) void
9034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       else /* __CYGWIN__ */
9044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                               define PyMODINIT_FUNC void
9054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       endif /* __CYGWIN__ */
9064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#               else /* Py_BUILD_CORE */
9074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        /* Building an extension module, or an embedded situation */
9084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        /* public Python functions and data are imported */
9094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        /* Under Cygwin, auto-import functions to prevent compilation */
9104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        /* failures similar to those described at the bottom of 4.1: */
9114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        /* http://docs.python.org/extending/windows.html#a-cookbook-approach */
9124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       if !defined(__CYGWIN__) && !defined(__MINGW32__)
9134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                               define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE
9144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       else
9154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                               define PyAPI_FUNC(RTYPE) RTYPE
9164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       endif /* !__CYGWIN__  !__MINGW32__ */
9174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            /* NOTE: The issue3945 "compile error in _fileio.c (cygwin)"
9184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao             * was resolved with modification of code.
9194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao             * This issue was resolved for gcc(mingw) with enabling auto
9204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao             * import feature. Since _fileio.c problem now disappear there
9214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao             * is no more reasons to avoid dllimport for gcc(mingw).
9224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao             */
9234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE
9244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        /* module init functions outside the core must be exported */
9254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       if defined(__cplusplus)
9264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                               define PyMODINIT_FUNC extern "C" __declspec(dllexport) void
9274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       else /* __cplusplus */
9284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                               define PyMODINIT_FUNC __declspec(dllexport) void
9294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#                       endif /* __cplusplus */
9304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#               endif /* Py_BUILD_CORE */
9314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       endif /* HAVE_DECLSPEC */
9324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* Py_ENABLE_SHARED */
9334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* If no external linkage macros defined by now, create defaults */
9354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PyAPI_FUNC
9364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       define PyAPI_FUNC(RTYPE) RTYPE
9374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
9384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PyAPI_DATA
9394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       define PyAPI_DATA(RTYPE) extern RTYPE
9404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
9414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef PyMODINIT_FUNC
9424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       if defined(__cplusplus)
9434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#               define PyMODINIT_FUNC extern "C" void
9444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       else /* __cplusplus */
9454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#               define PyMODINIT_FUNC void
9464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       endif /* __cplusplus */
9474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
9484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Deprecated DL_IMPORT and DL_EXPORT macros */
9504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(Py_ENABLE_SHARED) && defined (HAVE_DECLSPEC_DLL)
9514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       if defined(Py_BUILD_CORE)
9524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#               define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
9534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#               define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
9544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       else
9554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#               define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
9564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#               define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
9574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       endif
9584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
9594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef DL_EXPORT
9604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       define DL_EXPORT(RTYPE) RTYPE
9614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
9624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef DL_IMPORT
9634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#       define DL_IMPORT(RTYPE) RTYPE
9644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
9654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* End of deprecated DL_* macros */
9664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* If the fd manipulation macros aren't defined,
9684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao   here is a set that should do the job */
9694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if 0 /* disabled and probably obsolete */
9714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef FD_SETSIZE
9734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define FD_SETSIZE      256
9744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
9754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef FD_SET
9774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef long fd_mask;
9794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define NFDBITS (sizeof(fd_mask) * NBBY)        /* bits per mask */
9814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef howmany
9824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define howmany(x, y)   (((x)+((y)-1))/(y))
9834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* howmany */
9844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypedef struct fd_set {
9864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    fd_mask     fds_bits[howmany(FD_SETSIZE, NFDBITS)];
9874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao} fd_set;
9884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
9904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
9914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
9924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define FD_ZERO(p)      memset((char *)(p), '\0', sizeof(*(p)))
9934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* FD_SET */
9954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* fd manipulation macros */
9974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* limits.h constants that may be missing */
10004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef INT_MAX
10024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define INT_MAX 2147483647
10034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef LONG_MAX
10064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if SIZEOF_LONG == 4
10074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define LONG_MAX 0X7FFFFFFFL
10084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#elif SIZEOF_LONG == 8
10094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define LONG_MAX 0X7FFFFFFFFFFFFFFFL
10104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
10114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#error "could not set LONG_MAX in pyport.h"
10124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef LONG_MIN
10164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define LONG_MIN (-LONG_MAX-1)
10174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef LONG_BIT
10204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define LONG_BIT (8 * SIZEOF_LONG)
10214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if LONG_BIT != 8 * SIZEOF_LONG
10244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* 04-Oct-2000 LONG_BIT is apparently (mis)defined as 64 on some recent
10254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 32-bit platforms using gcc.  We try to catch that here at compile-time
10264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * rather than waiting for integer multiplication to trigger bogus
10274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * overflows.
10284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
10294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
10304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef __cplusplus
10334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao}
10344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*
10374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Hide GCC attributes from compilers that don't support them.
10384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
10394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if (!defined(__GNUC__) || __GNUC__ < 2 || \
10404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao     (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ) && \
10414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    !defined(RISCOS)
10424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_GCC_ATTRIBUTE(x)
10434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
10444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_GCC_ATTRIBUTE(x) __attribute__(x)
10454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*
10484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Add PyArg_ParseTuple format where available.
10494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
10504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef HAVE_ATTRIBUTE_FORMAT_PARSETUPLE
10514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_FORMAT_PARSETUPLE(func,p1,p2) __attribute__((format(func,p1,p2)))
10524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
10534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_FORMAT_PARSETUPLE(func,p1,p2)
10544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*
10574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Specify alignment on compilers that support it.
10584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
10594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#if defined(__GNUC__) && __GNUC__ >= 3
10604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_ALIGNED(x) __attribute__((aligned(x)))
10614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else
10624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_ALIGNED(x)
10634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* Eliminate end-of-loop code not reached warnings from SunPro C
10664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * when using do{...}while(0) macros
10674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
10684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef __SUNPRO_C
10694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#pragma error_messages (off,E_END_OF_LOOP_CODE_NOT_REACHED)
10704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/*
10734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Older Microsoft compilers don't support the C99 long long literal suffixes,
10744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * so these will be defined in PC/pyconfig.h for those compilers.
10754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */
10764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef Py_LL
10774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_LL(x) x##LL
10784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef Py_ULL
10814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define Py_ULL(x) Py_LL(x##U)
10824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif
10834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* Py_PYPORT_H */
1085