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