mirror of
https://github.com/python/cpython.git
synced 2025-10-26 11:14:33 +00:00
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
................
r55837 | guido.van.rossum | 2007-06-08 16:04:42 -0700 (Fri, 08 Jun 2007) | 2 lines
PEP 3119 -- the abc module.
................
r55838 | guido.van.rossum | 2007-06-08 17:38:55 -0700 (Fri, 08 Jun 2007) | 2 lines
Implement part of PEP 3119 -- One Trick Ponies.
................
r55847 | guido.van.rossum | 2007-06-09 08:28:06 -0700 (Sat, 09 Jun 2007) | 2 lines
Different way to do one trick ponies, allowing registration (per PEP strawman).
................
r55849 | guido.van.rossum | 2007-06-09 18:06:38 -0700 (Sat, 09 Jun 2007) | 3 lines
Make sure that the magic looking for __hash__ (etc.) doesn't apply to
real subclasses of Hashable.
................
r55852 | guido.van.rossum | 2007-06-10 08:29:51 -0700 (Sun, 10 Jun 2007) | 2 lines
Add some more examples, e.g. generators and dict views.
................
r55853 | guido.van.rossum | 2007-06-10 08:31:59 -0700 (Sun, 10 Jun 2007) | 2 lines
keys() and items() *are* containers -- just values() isn't.
................
r55864 | georg.brandl | 2007-06-10 15:29:40 -0700 (Sun, 10 Jun 2007) | 2 lines
PEP 3127: new octal literals, binary literals.
................
r55865 | georg.brandl | 2007-06-10 15:31:37 -0700 (Sun, 10 Jun 2007) | 2 lines
Some octal literal fixes in Tools.
................
r55866 | georg.brandl | 2007-06-10 15:37:43 -0700 (Sun, 10 Jun 2007) | 2 lines
Tokenizer changes for PEP 3127.
................
r55867 | georg.brandl | 2007-06-10 15:37:55 -0700 (Sun, 10 Jun 2007) | 2 lines
Some docs for PEP 3127.
................
r55868 | georg.brandl | 2007-06-10 15:44:39 -0700 (Sun, 10 Jun 2007) | 2 lines
Missed a place in intobject.c. Is that used anymore anyway?
................
r55871 | neal.norwitz | 2007-06-10 18:31:49 -0700 (Sun, 10 Jun 2007) | 182 lines
Merged revisions 55729-55868 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r55731 | neal.norwitz | 2007-06-01 00:29:12 -0700 (Fri, 01 Jun 2007) | 7 lines
SF 1668596/1720897: distutils now copies data files
even if package_dir is empty.
This needs to be backported. I'm too tired tonight. It would be great
if someone backports this if the buildbots are ok with it. Otherwise,
I will try to get to it tomorrow.
........
r55732 | georg.brandl | 2007-06-01 04:33:33 -0700 (Fri, 01 Jun 2007) | 2 lines
Bug #1722484: remove docstrings again when running with -OO.
........
r55735 | georg.brandl | 2007-06-01 12:20:27 -0700 (Fri, 01 Jun 2007) | 2 lines
Fix wrong issue number.
........
r55739 | brett.cannon | 2007-06-01 20:02:29 -0700 (Fri, 01 Jun 2007) | 3 lines
Have configure raise an error when building on AtheOS. Code specific to AtheOS
will be removed in Python 2.7.
........
r55746 | neal.norwitz | 2007-06-02 11:33:53 -0700 (Sat, 02 Jun 2007) | 1 line
Update expected birthday of 2.6
........
r55751 | neal.norwitz | 2007-06-03 13:32:50 -0700 (Sun, 03 Jun 2007) | 10 lines
Backout the original 'fix' to 1721309 which had no effect.
Different versions of Berkeley DB handle this differently.
The comments and bug report should have the details. Memory is allocated
in 4.4 (and presumably earlier), but not in 4.5. Thus
4.5 has the free error, but not earlier versions.
Mostly update comments, plus make the free conditional.
This fix was already applied to the 2.5 branch.
........
r55752 | brett.cannon | 2007-06-03 16:13:41 -0700 (Sun, 03 Jun 2007) | 6 lines
Make _strptime.TimeRE().pattern() use ``\s+`` for matching whitespace instead
of ``\s*``. This prevents patterns from "stealing" bits from other patterns in
order to make a match work.
Closes bug #1730389. Will be backported.
........
r55766 | hyeshik.chang | 2007-06-05 11:16:52 -0700 (Tue, 05 Jun 2007) | 4 lines
Fix build on FreeBSD. Bluetooth HCI API in FreeBSD is quite different
from Linux's. Just fix the build for now but the code doesn't
support the complete capability of HCI on FreeBSD yet.
........
r55770 | hyeshik.chang | 2007-06-05 11:58:51 -0700 (Tue, 05 Jun 2007) | 4 lines
Bug #1728403: Fix a bug that CJKCodecs StreamReader hangs when it
reads a file that ends with incomplete sequence and sizehint argument
for .read() is specified.
........
r55775 | hyeshik.chang | 2007-06-05 12:28:15 -0700 (Tue, 05 Jun 2007) | 2 lines
Fix for Windows: close a temporary file before trying to delete it.
........
r55783 | guido.van.rossum | 2007-06-05 14:24:47 -0700 (Tue, 05 Jun 2007) | 2 lines
Patch by Tim Delany (missing DECREF). SF #1731330.
........
r55785 | collin.winter | 2007-06-05 17:17:35 -0700 (Tue, 05 Jun 2007) | 3 lines
Patch #1731049: make threading.py use a proper "raise" when checking internal state, rather than assert statements (which get stripped out by -O).
........
r55786 | facundo.batista | 2007-06-06 08:13:37 -0700 (Wed, 06 Jun 2007) | 4 lines
FTP.ntransfercmd method now uses create_connection when passive,
using the timeout received in connection time.
........
r55792 | facundo.batista | 2007-06-06 10:15:23 -0700 (Wed, 06 Jun 2007) | 7 lines
Added an optional timeout parameter to function urllib2.urlopen,
with tests in test_urllib2net.py (must have network resource
enabled to execute them). Also modified test_urllib2.py because
testing mock classes must take it into acount. Docs are also
updated.
........
r55793 | thomas.heller | 2007-06-06 13:19:19 -0700 (Wed, 06 Jun 2007) | 1 line
Build _ctypes and _ctypes_test in the ReleaseAMD64 configuration.
........
r55802 | georg.brandl | 2007-06-07 06:23:24 -0700 (Thu, 07 Jun 2007) | 3 lines
Disallow function calls like foo(None=1).
Backport from py3k rev. 55708 by Guido.
........
r55804 | georg.brandl | 2007-06-07 06:30:24 -0700 (Thu, 07 Jun 2007) | 2 lines
Make reindent.py executable.
........
r55805 | georg.brandl | 2007-06-07 06:34:10 -0700 (Thu, 07 Jun 2007) | 2 lines
Patch #1667860: Fix UnboundLocalError in urllib2.
........
r55821 | kristjan.jonsson | 2007-06-07 16:53:49 -0700 (Thu, 07 Jun 2007) | 1 line
Fixing changes to getbuildinfo.c that broke linux builds
........
r55828 | thomas.heller | 2007-06-08 09:10:27 -0700 (Fri, 08 Jun 2007) | 1 line
Make this test work with older Python releases where struct has no 't' format character.
........
r55829 | martin.v.loewis | 2007-06-08 10:29:20 -0700 (Fri, 08 Jun 2007) | 3 lines
Bug #1733488: Fix compilation of bufferobject.c on AIX.
Will backport to 2.5.
........
r55831 | thomas.heller | 2007-06-08 11:20:09 -0700 (Fri, 08 Jun 2007) | 2 lines
[ 1715718 ] x64 clean compile patch for _ctypes, by Kristj?n Valur
with small modifications.
........
r55832 | thomas.heller | 2007-06-08 12:01:06 -0700 (Fri, 08 Jun 2007) | 1 line
Fix gcc warnings intruduced by passing Py_ssize_t to PyErr_Format calls.
........
r55833 | thomas.heller | 2007-06-08 12:08:31 -0700 (Fri, 08 Jun 2007) | 2 lines
Fix wrong documentation, and correct the punktuation.
Closes [1700455].
........
r55834 | thomas.heller | 2007-06-08 12:14:23 -0700 (Fri, 08 Jun 2007) | 1 line
Fix warnings by using proper function prototype.
........
r55839 | neal.norwitz | 2007-06-08 20:36:34 -0700 (Fri, 08 Jun 2007) | 7 lines
Prevent expandtabs() on string and unicode objects from causing a segfault when
a large width is passed on 32-bit platforms. Found by Google.
It would be good for people to review this especially carefully and verify
I don't have an off by one error and there is no other way to cause overflow.
........
r55841 | neal.norwitz | 2007-06-08 21:48:22 -0700 (Fri, 08 Jun 2007) | 1 line
Use macro version of GET_SIZE to avoid Coverity warning (#150) about a possible error.
........
r55842 | martin.v.loewis | 2007-06-09 00:42:52 -0700 (Sat, 09 Jun 2007) | 3 lines
Patch #1733960: Allow T_LONGLONG to accept ints.
Will backport to 2.5.
........
r55843 | martin.v.loewis | 2007-06-09 00:58:05 -0700 (Sat, 09 Jun 2007) | 2 lines
Fix Windows build.
........
r55845 | martin.v.loewis | 2007-06-09 03:10:26 -0700 (Sat, 09 Jun 2007) | 2 lines
Provide LLONG_MAX for S390.
........
r55854 | thomas.heller | 2007-06-10 08:59:17 -0700 (Sun, 10 Jun 2007) | 4 lines
First version of build scripts for Windows/AMD64 (no external
components are built yet, and 'kill_python' is disabled).
........
r55855 | thomas.heller | 2007-06-10 10:55:51 -0700 (Sun, 10 Jun 2007) | 3 lines
For now, disable the _bsddb, _sqlite3, _ssl, _testcapi, _tkinter
modules in the ReleaseAMD64 configuration because they do not compile.
........
r55856 | thomas.heller | 2007-06-10 11:27:54 -0700 (Sun, 10 Jun 2007) | 1 line
Need to set the environment variables, otherwise devenv.com is not found.
........
r55860 | thomas.heller | 2007-06-10 14:01:17 -0700 (Sun, 10 Jun 2007) | 1 line
Revert commit 55855.
........
................
r55880 | neal.norwitz | 2007-06-10 22:07:36 -0700 (Sun, 10 Jun 2007) | 5 lines
Fix the refleak counter on test_collections. The ABC metaclass creates
a registry which must be cleared on each run. Otherwise, there *seem*
to be refleaks when there really aren't any. (The class is held within
the registry even though it's no longer needed.)
................
r55884 | neal.norwitz | 2007-06-10 22:46:33 -0700 (Sun, 10 Jun 2007) | 1 line
These tests have been removed, so they are no longer needed here
................
r55886 | georg.brandl | 2007-06-11 00:26:37 -0700 (Mon, 11 Jun 2007) | 3 lines
Optimize access to True and False in the compiler (if True)
and the peepholer (LOAD_NAME True).
................
r55905 | georg.brandl | 2007-06-11 10:02:26 -0700 (Mon, 11 Jun 2007) | 5 lines
Remove __oct__ and __hex__ and use __index__ for converting
non-ints before formatting in a base.
Add a bin() builtin.
................
r55906 | georg.brandl | 2007-06-11 10:04:44 -0700 (Mon, 11 Jun 2007) | 2 lines
int(x, 0) does not "guess".
................
r55907 | georg.brandl | 2007-06-11 10:05:47 -0700 (Mon, 11 Jun 2007) | 2 lines
Add a comment to explain that nb_oct and nb_hex are nonfunctional.
................
r55908 | guido.van.rossum | 2007-06-11 10:49:18 -0700 (Mon, 11 Jun 2007) | 2 lines
Get rid of unused imports and comment.
................
r55910 | guido.van.rossum | 2007-06-11 13:05:17 -0700 (Mon, 11 Jun 2007) | 2 lines
_Abstract.__new__ now requires either no arguments or __init__ overridden.
................
r55911 | guido.van.rossum | 2007-06-11 13:07:49 -0700 (Mon, 11 Jun 2007) | 7 lines
Move the collections ABCs to a separate file, _abcoll.py, in order to avoid
needing to import _collections.so during the bootstrap (this will become
apparent in the next submit of os.py).
Add (plain and mutable) ABCs for Set, Mapping, Sequence.
................
r55912 | guido.van.rossum | 2007-06-11 13:09:31 -0700 (Mon, 11 Jun 2007) | 2 lines
Rewrite the _Environ class to use the new collections ABCs.
................
r55913 | guido.van.rossum | 2007-06-11 13:59:45 -0700 (Mon, 11 Jun 2007) | 72 lines
Merged revisions 55869-55912 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r55869 | neal.norwitz | 2007-06-10 17:42:11 -0700 (Sun, 10 Jun 2007) | 1 line
Add Atul Varma for patch # 1667860
........
r55870 | neal.norwitz | 2007-06-10 18:22:03 -0700 (Sun, 10 Jun 2007) | 1 line
Ignore valgrind problems on Ubuntu from ld
........
r55872 | neal.norwitz | 2007-06-10 18:48:46 -0700 (Sun, 10 Jun 2007) | 2 lines
Ignore config.status.lineno which seems new (new autoconf?)
........
r55873 | neal.norwitz | 2007-06-10 19:14:39 -0700 (Sun, 10 Jun 2007) | 1 line
Prevent these tests from running on Win64 since they don\'t apply there either
........
r55874 | neal.norwitz | 2007-06-10 19:16:10 -0700 (Sun, 10 Jun 2007) | 5 lines
Fix a bug when there was a newline in the string expandtabs was called on.
This also catches another condition that can overflow.
Will backport.
........
r55879 | neal.norwitz | 2007-06-10 21:52:37 -0700 (Sun, 10 Jun 2007) | 1 line
Prevent hang if the port cannot be opened.
........
r55881 | neal.norwitz | 2007-06-10 22:28:45 -0700 (Sun, 10 Jun 2007) | 4 lines
Add all of the distuils modules that don't seem to have explicit tests. :-(
Move an import in mworkscompiler so that this module can be imported on
any platform. Hopefully this works on all platforms.
........
r55882 | neal.norwitz | 2007-06-10 22:35:10 -0700 (Sun, 10 Jun 2007) | 4 lines
SF #1734732, lower case the module names per PEP 8.
Will backport.
........
r55885 | neal.norwitz | 2007-06-10 23:16:48 -0700 (Sun, 10 Jun 2007) | 4 lines
Not sure why this only fails sometimes on Unix machines. Better
to disable it and only import msvccompiler on Windows since that's
the only place it can work anyways.
........
r55887 | neal.norwitz | 2007-06-11 00:29:43 -0700 (Mon, 11 Jun 2007) | 4 lines
Bug #1734723: Fix repr.Repr() so it doesn't ignore the maxtuple attribute.
Will backport
........
r55889 | neal.norwitz | 2007-06-11 00:36:24 -0700 (Mon, 11 Jun 2007) | 1 line
Reflow long line
........
r55896 | thomas.heller | 2007-06-11 08:58:33 -0700 (Mon, 11 Jun 2007) | 3 lines
Use "O&" in calls to PyArg_Parse when we need a 'void*' instead of "k"
or "K" codes.
........
r55901 | facundo.batista | 2007-06-11 09:27:08 -0700 (Mon, 11 Jun 2007) | 5 lines
Added versionchanged flag to all the methods which received
a new optional timeout parameter, and a versionadded flag to
the socket.create_connection function.
........
................
r55914 | guido.van.rossum | 2007-06-11 14:19:50 -0700 (Mon, 11 Jun 2007) | 3 lines
New super() implementation, for PEP 3135 (though the PEP is not yet updated
to this design, and small tweaks may still be made later).
................
r55923 | guido.van.rossum | 2007-06-11 21:15:24 -0700 (Mon, 11 Jun 2007) | 4 lines
I'm guessing this module broke when Neal ripped out the types module --
it used 'list' both as a local variable and as the built-in list type.
Renamed the local variable since that was easier.
................
r55924 | guido.van.rossum | 2007-06-11 21:20:05 -0700 (Mon, 11 Jun 2007) | 5 lines
Change all occurrences of super(<thisclass>, <firstarg>) to super().
Seems to have worked, all the tests still pass.
Exception: test_descr and test_descrtut, which have tons of these
and are there to test the various usages.
................
r55939 | collin.winter | 2007-06-12 13:57:33 -0700 (Tue, 12 Jun 2007) | 1 line
Patch #1735485: remove StandardError from the exception hierarchy.
................
r55954 | neal.norwitz | 2007-06-12 21:56:32 -0700 (Tue, 12 Jun 2007) | 51 lines
Merged revisions 55913-55950 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r55926 | marc-andre.lemburg | 2007-06-12 02:09:58 -0700 (Tue, 12 Jun 2007) | 3 lines
Apply patch #1734945 to support TurboLinux as distribution.
........
r55927 | marc-andre.lemburg | 2007-06-12 02:26:49 -0700 (Tue, 12 Jun 2007) | 3 lines
Add patch #1726668: Windows Vista support.
........
r55929 | thomas.heller | 2007-06-12 08:36:22 -0700 (Tue, 12 Jun 2007) | 1 line
Checkout, but do not yet try to build, exernal sources.
........
r55930 | thomas.heller | 2007-06-12 09:08:27 -0700 (Tue, 12 Jun 2007) | 6 lines
Add bufferoverflowU.lib to the libraries needed by _ssl (is this the
right thing to do?).
Set the /XP64 /RETAIL build enviroment in the makefile when building
ReleaseAMD64.
........
r55931 | thomas.heller | 2007-06-12 09:23:19 -0700 (Tue, 12 Jun 2007) | 5 lines
Revert this change, since it breaks the win32 build:
Add bufferoverflowU.lib to the libraries needed by _ssl (is this the
right thing to do?).
........
r55934 | thomas.heller | 2007-06-12 10:28:31 -0700 (Tue, 12 Jun 2007) | 3 lines
Specify the bufferoverflowU.lib to the makefile on the command line
(for ReleaseAMD64 builds).
........
r55937 | thomas.heller | 2007-06-12 12:02:59 -0700 (Tue, 12 Jun 2007) | 3 lines
Add bufferoverflowU.lib to PCBuild\_bsddb.vcproj.
Build sqlite3.dll and bsddb.
........
r55938 | thomas.heller | 2007-06-12 12:56:12 -0700 (Tue, 12 Jun 2007) | 2 lines
Don't rebuild Berkeley DB if not needed (this was committed by accident).
........
r55948 | martin.v.loewis | 2007-06-12 20:42:19 -0700 (Tue, 12 Jun 2007) | 3 lines
Provide PY_LLONG_MAX on all systems having long long.
Will backport to 2.5.
........
................
r55959 | guido.van.rossum | 2007-06-13 09:22:41 -0700 (Wed, 13 Jun 2007) | 2 lines
Fix a compilation warning.
................
715 lines
22 KiB
C
715 lines
22 KiB
C
#ifndef Py_PYPORT_H
|
|
#define Py_PYPORT_H
|
|
|
|
#include "pyconfig.h" /* include for defines */
|
|
|
|
#ifdef HAVE_STDINT_H
|
|
#include <stdint.h>
|
|
#endif
|
|
|
|
/**************************************************************************
|
|
Symbols and macros to supply platform-independent interfaces to basic
|
|
C language & library operations whose spellings vary across platforms.
|
|
|
|
Please try to make documentation here as clear as possible: by definition,
|
|
the stuff here is trying to illuminate C's darkest corners.
|
|
|
|
Config #defines referenced here:
|
|
|
|
SIGNED_RIGHT_SHIFT_ZERO_FILLS
|
|
Meaning: To be defined iff i>>j does not extend the sign bit when i is a
|
|
signed integral type and i < 0.
|
|
Used in: Py_ARITHMETIC_RIGHT_SHIFT
|
|
|
|
Py_DEBUG
|
|
Meaning: Extra checks compiled in for debug mode.
|
|
Used in: Py_SAFE_DOWNCAST
|
|
|
|
HAVE_UINTPTR_T
|
|
Meaning: The C9X type uintptr_t is supported by the compiler
|
|
Used in: Py_uintptr_t
|
|
|
|
HAVE_LONG_LONG
|
|
Meaning: The compiler supports the C type "long long"
|
|
Used in: PY_LONG_LONG
|
|
|
|
**************************************************************************/
|
|
|
|
/* typedefs for some C9X-defined synonyms for integral types.
|
|
*
|
|
* The names in Python are exactly the same as the C9X names, except with a
|
|
* Py_ prefix. Until C9X is universally implemented, this is the only way
|
|
* to ensure that Python gets reliable names that don't conflict with names
|
|
* in non-Python code that are playing their own tricks to define the C9X
|
|
* names.
|
|
*
|
|
* NOTE: don't go nuts here! Python has no use for *most* of the C9X
|
|
* integral synonyms. Only define the ones we actually need.
|
|
*/
|
|
|
|
#ifdef HAVE_LONG_LONG
|
|
#ifndef PY_LONG_LONG
|
|
#define PY_LONG_LONG long long
|
|
#if defined(LLONG_MAX)
|
|
/* If LLONG_MAX is defined in limits.h, use that. */
|
|
#define PY_LLONG_MIN LLONG_MIN
|
|
#define PY_LLONG_MAX LLONG_MAX
|
|
#define PY_ULLONG_MAX ULLONG_MAX
|
|
#elif defined(__LONG_LONG_MAX__)
|
|
/* Otherwise, if GCC has a builtin define, use that. */
|
|
#define PY_LLONG_MAX __LONG_LONG_MAX__
|
|
#define PY_LLONG_MIN (-PY_LLONG_MAX-1)
|
|
#define PY_ULLONG_MAX (__LONG_LONG_MAX__*2ULL + 1ULL)
|
|
#else
|
|
/* Otherwise, rely on two's complement. */
|
|
#define PY_ULLONG_MAX (~0ULL)
|
|
#define PY_LLONG_MAX ((long long)(PY_ULLONG_MAX>>1))
|
|
#define PY_LLONG_MIN (-PY_LLONG_MAX-1)
|
|
#endif /* LLONG_MAX */
|
|
#endif
|
|
#endif /* HAVE_LONG_LONG */
|
|
|
|
/* uintptr_t is the C9X name for an unsigned integral type such that a
|
|
* legitimate void* can be cast to uintptr_t and then back to void* again
|
|
* without loss of information. Similarly for intptr_t, wrt a signed
|
|
* integral type.
|
|
*/
|
|
#ifdef HAVE_UINTPTR_T
|
|
typedef uintptr_t Py_uintptr_t;
|
|
typedef intptr_t Py_intptr_t;
|
|
|
|
#elif SIZEOF_VOID_P <= SIZEOF_INT
|
|
typedef unsigned int Py_uintptr_t;
|
|
typedef int Py_intptr_t;
|
|
|
|
#elif SIZEOF_VOID_P <= SIZEOF_LONG
|
|
typedef unsigned long Py_uintptr_t;
|
|
typedef long Py_intptr_t;
|
|
|
|
#elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P <= SIZEOF_LONG_LONG)
|
|
typedef unsigned PY_LONG_LONG Py_uintptr_t;
|
|
typedef PY_LONG_LONG Py_intptr_t;
|
|
|
|
#else
|
|
# error "Python needs a typedef for Py_uintptr_t in pyport.h."
|
|
#endif /* HAVE_UINTPTR_T */
|
|
|
|
/* Py_ssize_t is a signed integral type such that sizeof(Py_ssize_t) ==
|
|
* sizeof(size_t). C99 doesn't define such a thing directly (size_t is an
|
|
* unsigned integral type). See PEP 353 for details.
|
|
*/
|
|
#ifdef HAVE_SSIZE_T
|
|
typedef ssize_t Py_ssize_t;
|
|
#elif SIZEOF_VOID_P == SIZEOF_SIZE_T
|
|
typedef Py_intptr_t Py_ssize_t;
|
|
#else
|
|
# error "Python needs a typedef for Py_ssize_t in pyport.h."
|
|
#endif
|
|
|
|
/* Largest positive value of type Py_ssize_t. */
|
|
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
|
|
/* Smallest negative value of type Py_ssize_t. */
|
|
#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1)
|
|
|
|
/* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf
|
|
* format to convert an argument with the width of a size_t or Py_ssize_t.
|
|
* C99 introduced "z" for this purpose, but not all platforms support that;
|
|
* e.g., MS compilers use "I" instead.
|
|
*
|
|
* These "high level" Python format functions interpret "z" correctly on
|
|
* all platforms (Python interprets the format string itself, and does whatever
|
|
* the platform C requires to convert a size_t/Py_ssize_t argument):
|
|
*
|
|
* PyString_FromFormat
|
|
* PyErr_Format
|
|
* PyString_FromFormatV
|
|
* PyUnicode_FromFormatV
|
|
*
|
|
* Lower-level uses require that you interpolate the correct format modifier
|
|
* yourself (e.g., calling printf, fprintf, sprintf, PyOS_snprintf); for
|
|
* example,
|
|
*
|
|
* Py_ssize_t index;
|
|
* fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index);
|
|
*
|
|
* That will expand to %ld, or %Id, or to something else correct for a
|
|
* Py_ssize_t on the platform.
|
|
*/
|
|
#ifndef PY_FORMAT_SIZE_T
|
|
# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__)
|
|
# define PY_FORMAT_SIZE_T ""
|
|
# elif SIZEOF_SIZE_T == SIZEOF_LONG
|
|
# define PY_FORMAT_SIZE_T "l"
|
|
# elif defined(MS_WINDOWS)
|
|
# define PY_FORMAT_SIZE_T "I"
|
|
# else
|
|
# error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T"
|
|
# endif
|
|
#endif
|
|
|
|
/* Py_LOCAL can be used instead of static to get the fastest possible calling
|
|
* convention for functions that are local to a given module.
|
|
*
|
|
* Py_LOCAL_INLINE does the same thing, and also explicitly requests inlining,
|
|
* for platforms that support that.
|
|
*
|
|
* If PY_LOCAL_AGGRESSIVE is defined before python.h is included, more
|
|
* "aggressive" inlining/optimizaion is enabled for the entire module. This
|
|
* may lead to code bloat, and may slow things down for those reasons. It may
|
|
* also lead to errors, if the code relies on pointer aliasing. Use with
|
|
* care.
|
|
*
|
|
* NOTE: You can only use this for functions that are entirely local to a
|
|
* module; functions that are exported via method tables, callbacks, etc,
|
|
* should keep using static.
|
|
*/
|
|
|
|
#undef USE_INLINE /* XXX - set via configure? */
|
|
|
|
#if defined(_MSC_VER)
|
|
#if defined(PY_LOCAL_AGGRESSIVE)
|
|
/* enable more aggressive optimization for visual studio */
|
|
#pragma optimize("agtw", on)
|
|
#endif
|
|
/* ignore warnings if the compiler decides not to inline a function */
|
|
#pragma warning(disable: 4710)
|
|
/* fastest possible local call under MSVC */
|
|
#define Py_LOCAL(type) static type __fastcall
|
|
#define Py_LOCAL_INLINE(type) static __inline type __fastcall
|
|
#elif defined(USE_INLINE)
|
|
#define Py_LOCAL(type) static type
|
|
#define Py_LOCAL_INLINE(type) static inline type
|
|
#else
|
|
#define Py_LOCAL(type) static type
|
|
#define Py_LOCAL_INLINE(type) static type
|
|
#endif
|
|
|
|
/* Py_MEMCPY can be used instead of memcpy in cases where the copied blocks
|
|
* are often very short. While most platforms have highly optimized code for
|
|
* large transfers, the setup costs for memcpy are often quite high. MEMCPY
|
|
* solves this by doing short copies "in line".
|
|
*/
|
|
|
|
#if defined(_MSC_VER)
|
|
#define Py_MEMCPY(target, source, length) do { \
|
|
size_t i_, n_ = (length); \
|
|
char *t_ = (void*) (target); \
|
|
const char *s_ = (void*) (source); \
|
|
if (n_ >= 16) \
|
|
memcpy(t_, s_, n_); \
|
|
else \
|
|
for (i_ = 0; i_ < n_; i_++) \
|
|
t_[i_] = s_[i_]; \
|
|
} while (0)
|
|
#else
|
|
#define Py_MEMCPY memcpy
|
|
#endif
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <math.h> /* Moved here from the math section, before extern "C" */
|
|
|
|
/********************************************
|
|
* WRAPPER FOR <time.h> and/or <sys/time.h> *
|
|
********************************************/
|
|
|
|
#ifdef TIME_WITH_SYS_TIME
|
|
#include <sys/time.h>
|
|
#include <time.h>
|
|
#else /* !TIME_WITH_SYS_TIME */
|
|
#ifdef HAVE_SYS_TIME_H
|
|
#include <sys/time.h>
|
|
#else /* !HAVE_SYS_TIME_H */
|
|
#include <time.h>
|
|
#endif /* !HAVE_SYS_TIME_H */
|
|
#endif /* !TIME_WITH_SYS_TIME */
|
|
|
|
|
|
/******************************
|
|
* WRAPPER FOR <sys/select.h> *
|
|
******************************/
|
|
|
|
/* NB caller must include <sys/types.h> */
|
|
|
|
#ifdef HAVE_SYS_SELECT_H
|
|
#include <sys/select.h>
|
|
#endif /* !HAVE_SYS_SELECT_H */
|
|
|
|
/*******************************
|
|
* stat() and fstat() fiddling *
|
|
*******************************/
|
|
|
|
/* We expect that stat and fstat exist on most systems.
|
|
* It's confirmed on Unix, Mac and Windows.
|
|
* If you don't have them, add
|
|
* #define DONT_HAVE_STAT
|
|
* and/or
|
|
* #define DONT_HAVE_FSTAT
|
|
* to your pyconfig.h. Python code beyond this should check HAVE_STAT and
|
|
* HAVE_FSTAT instead.
|
|
* Also
|
|
* #define HAVE_SYS_STAT_H
|
|
* if <sys/stat.h> exists on your platform, and
|
|
* #define HAVE_STAT_H
|
|
* if <stat.h> does.
|
|
*/
|
|
#ifndef DONT_HAVE_STAT
|
|
#define HAVE_STAT
|
|
#endif
|
|
|
|
#ifndef DONT_HAVE_FSTAT
|
|
#define HAVE_FSTAT
|
|
#endif
|
|
|
|
#ifdef RISCOS
|
|
#include <sys/types.h>
|
|
#include "unixstuff.h"
|
|
#endif
|
|
|
|
#ifdef HAVE_SYS_STAT_H
|
|
#if defined(PYOS_OS2) && defined(PYCC_GCC)
|
|
#include <sys/types.h>
|
|
#endif
|
|
#include <sys/stat.h>
|
|
#elif defined(HAVE_STAT_H)
|
|
#include <stat.h>
|
|
#endif
|
|
|
|
#if defined(PYCC_VACPP)
|
|
/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
|
|
#define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG)
|
|
#endif
|
|
|
|
#ifndef S_ISREG
|
|
#define S_ISREG(x) (((x) & S_IFMT) == S_IFREG)
|
|
#endif
|
|
|
|
#ifndef S_ISDIR
|
|
#define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR)
|
|
#endif
|
|
|
|
|
|
#ifdef __cplusplus
|
|
/* Move this down here since some C++ #include's don't like to be included
|
|
inside an extern "C" */
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/* Py_ARITHMETIC_RIGHT_SHIFT
|
|
* C doesn't define whether a right-shift of a signed integer sign-extends
|
|
* or zero-fills. Here a macro to force sign extension:
|
|
* Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J)
|
|
* Return I >> J, forcing sign extension.
|
|
* Requirements:
|
|
* I is of basic signed type TYPE (char, short, int, long, or long long).
|
|
* TYPE is one of char, short, int, long, or long long, although long long
|
|
* must not be used except on platforms that support it.
|
|
* J is an integer >= 0 and strictly less than the number of bits in TYPE
|
|
* (because C doesn't define what happens for J outside that range either).
|
|
* Caution:
|
|
* I may be evaluated more than once.
|
|
*/
|
|
#ifdef SIGNED_RIGHT_SHIFT_ZERO_FILLS
|
|
#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) \
|
|
((I) < 0 ? ~((~(unsigned TYPE)(I)) >> (J)) : (I) >> (J))
|
|
#else
|
|
#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J))
|
|
#endif
|
|
|
|
/* Py_FORCE_EXPANSION(X)
|
|
* "Simply" returns its argument. However, macro expansions within the
|
|
* argument are evaluated. This unfortunate trickery is needed to get
|
|
* token-pasting to work as desired in some cases.
|
|
*/
|
|
#define Py_FORCE_EXPANSION(X) X
|
|
|
|
/* Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW)
|
|
* Cast VALUE to type NARROW from type WIDE. In Py_DEBUG mode, this
|
|
* assert-fails if any information is lost.
|
|
* Caution:
|
|
* VALUE may be evaluated more than once.
|
|
*/
|
|
#ifdef Py_DEBUG
|
|
#define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) \
|
|
(assert((WIDE)(NARROW)(VALUE) == (VALUE)), (NARROW)(VALUE))
|
|
#else
|
|
#define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) (NARROW)(VALUE)
|
|
#endif
|
|
|
|
/* Py_IS_NAN(X)
|
|
* Return 1 if float or double arg is a NaN, else 0.
|
|
* Caution:
|
|
* X is evaluated more than once.
|
|
* This may not work on all platforms. Each platform has *some*
|
|
* way to spell this, though -- override in pyconfig.h if you have
|
|
* a platform where it doesn't work.
|
|
*/
|
|
#ifndef Py_IS_NAN
|
|
#define Py_IS_NAN(X) ((X) != (X))
|
|
#endif
|
|
|
|
/* Py_IS_INFINITY(X)
|
|
* Return 1 if float or double arg is an infinity, else 0.
|
|
* Caution:
|
|
* X is evaluated more than once.
|
|
* This implementation may set the underflow flag if |X| is very small;
|
|
* it really can't be implemented correctly (& easily) before C99.
|
|
* Override in pyconfig.h if you have a better spelling on your platform.
|
|
*/
|
|
#ifndef Py_IS_INFINITY
|
|
#define Py_IS_INFINITY(X) ((X) && (X)*0.5 == (X))
|
|
#endif
|
|
|
|
/* Py_IS_FINITE(X)
|
|
* Return 1 if float or double arg is neither infinite nor NAN, else 0.
|
|
* Some compilers (e.g. VisualStudio) have intrisics for this, so a special
|
|
* macro for this particular test is useful
|
|
*/
|
|
#ifndef Py_IS_FINITE
|
|
#define Py_IS_FINITE(X) (!Py_IS_INFINITY(X) && !Py_IS_NAN(X))
|
|
#endif
|
|
|
|
/* HUGE_VAL is supposed to expand to a positive double infinity. Python
|
|
* uses Py_HUGE_VAL instead because some platforms are broken in this
|
|
* respect. We used to embed code in pyport.h to try to worm around that,
|
|
* but different platforms are broken in conflicting ways. If you're on
|
|
* a platform where HUGE_VAL is defined incorrectly, fiddle your Python
|
|
* config to #define Py_HUGE_VAL to something that works on your platform.
|
|
*/
|
|
#ifndef Py_HUGE_VAL
|
|
#define Py_HUGE_VAL HUGE_VAL
|
|
#endif
|
|
|
|
/* Py_OVERFLOWED(X)
|
|
* Return 1 iff a libm function overflowed. Set errno to 0 before calling
|
|
* a libm function, and invoke this macro after, passing the function
|
|
* result.
|
|
* Caution:
|
|
* This isn't reliable. C99 no longer requires libm to set errno under
|
|
* any exceptional condition, but does require +- HUGE_VAL return
|
|
* values on overflow. A 754 box *probably* maps HUGE_VAL to a
|
|
* double infinity, and we're cool if that's so, unless the input
|
|
* was an infinity and an infinity is the expected result. A C89
|
|
* system sets errno to ERANGE, so we check for that too. We're
|
|
* out of luck if a C99 754 box doesn't map HUGE_VAL to +Inf, or
|
|
* if the returned result is a NaN, or if a C89 box returns HUGE_VAL
|
|
* in non-overflow cases.
|
|
* X is evaluated more than once.
|
|
* Some platforms have better way to spell this, so expect some #ifdef'ery.
|
|
*
|
|
* OpenBSD uses 'isinf()' because a compiler bug on that platform causes
|
|
* the longer macro version to be mis-compiled. This isn't optimal, and
|
|
* should be removed once a newer compiler is available on that platform.
|
|
* The system that had the failure was running OpenBSD 3.2 on Intel, with
|
|
* gcc 2.95.3.
|
|
*
|
|
* According to Tim's checkin, the FreeBSD systems use isinf() to work
|
|
* around a FPE bug on that platform.
|
|
*/
|
|
#if defined(__FreeBSD__) || defined(__OpenBSD__)
|
|
#define Py_OVERFLOWED(X) isinf(X)
|
|
#else
|
|
#define Py_OVERFLOWED(X) ((X) != 0.0 && (errno == ERANGE || \
|
|
(X) == Py_HUGE_VAL || \
|
|
(X) == -Py_HUGE_VAL))
|
|
#endif
|
|
|
|
/* Py_SET_ERRNO_ON_MATH_ERROR(x)
|
|
* If a libm function did not set errno, but it looks like the result
|
|
* overflowed or not-a-number, set errno to ERANGE or EDOM. Set errno
|
|
* to 0 before calling a libm function, and invoke this macro after,
|
|
* passing the function result.
|
|
* Caution:
|
|
* This isn't reliable. See Py_OVERFLOWED comments.
|
|
* X is evaluated more than once.
|
|
*/
|
|
#if defined(__FreeBSD__) || defined(__OpenBSD__) || (defined(__hpux) && defined(__ia64))
|
|
#define _Py_SET_EDOM_FOR_NAN(X) if (isnan(X)) errno = EDOM;
|
|
#else
|
|
#define _Py_SET_EDOM_FOR_NAN(X) ;
|
|
#endif
|
|
#define Py_SET_ERRNO_ON_MATH_ERROR(X) \
|
|
do { \
|
|
if (errno == 0) { \
|
|
if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \
|
|
errno = ERANGE; \
|
|
else _Py_SET_EDOM_FOR_NAN(X) \
|
|
} \
|
|
} while(0)
|
|
|
|
/* Py_SET_ERANGE_ON_OVERFLOW(x)
|
|
* An alias of Py_SET_ERRNO_ON_MATH_ERROR for backward-compatibility.
|
|
*/
|
|
#define Py_SET_ERANGE_IF_OVERFLOW(X) Py_SET_ERRNO_ON_MATH_ERROR(X)
|
|
|
|
/* Py_ADJUST_ERANGE1(x)
|
|
* Py_ADJUST_ERANGE2(x, y)
|
|
* Set errno to 0 before calling a libm function, and invoke one of these
|
|
* macros after, passing the function result(s) (Py_ADJUST_ERANGE2 is useful
|
|
* for functions returning complex results). This makes two kinds of
|
|
* adjustments to errno: (A) If it looks like the platform libm set
|
|
* errno=ERANGE due to underflow, clear errno. (B) If it looks like the
|
|
* platform libm overflowed but didn't set errno, force errno to ERANGE. In
|
|
* effect, we're trying to force a useful implementation of C89 errno
|
|
* behavior.
|
|
* Caution:
|
|
* This isn't reliable. See Py_OVERFLOWED comments.
|
|
* X and Y may be evaluated more than once.
|
|
*/
|
|
#define Py_ADJUST_ERANGE1(X) \
|
|
do { \
|
|
if (errno == 0) { \
|
|
if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \
|
|
errno = ERANGE; \
|
|
} \
|
|
else if (errno == ERANGE && (X) == 0.0) \
|
|
errno = 0; \
|
|
} while(0)
|
|
|
|
#define Py_ADJUST_ERANGE2(X, Y) \
|
|
do { \
|
|
if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL || \
|
|
(Y) == Py_HUGE_VAL || (Y) == -Py_HUGE_VAL) { \
|
|
if (errno == 0) \
|
|
errno = ERANGE; \
|
|
} \
|
|
else if (errno == ERANGE) \
|
|
errno = 0; \
|
|
} while(0)
|
|
|
|
/* Py_DEPRECATED(version)
|
|
* Declare a variable, type, or function deprecated.
|
|
* Usage:
|
|
* extern int old_var Py_DEPRECATED(2.3);
|
|
* typedef int T1 Py_DEPRECATED(2.4);
|
|
* extern int x() Py_DEPRECATED(2.5);
|
|
*/
|
|
#if defined(__GNUC__) && ((__GNUC__ >= 4) || \
|
|
(__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))
|
|
#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))
|
|
#else
|
|
#define Py_DEPRECATED(VERSION_UNUSED)
|
|
#endif
|
|
|
|
/**************************************************************************
|
|
Prototypes that are missing from the standard include files on some systems
|
|
(and possibly only some versions of such systems.)
|
|
|
|
Please be conservative with adding new ones, document them and enclose them
|
|
in platform-specific #ifdefs.
|
|
**************************************************************************/
|
|
|
|
#ifdef SOLARIS
|
|
/* Unchecked */
|
|
extern int gethostname(char *, int);
|
|
#endif
|
|
|
|
#ifdef __BEOS__
|
|
/* Unchecked */
|
|
/* It's in the libs, but not the headers... - [cjh] */
|
|
int shutdown(int, int);
|
|
#endif
|
|
|
|
#ifdef HAVE__GETPTY
|
|
#include <sys/types.h> /* we need to import mode_t */
|
|
extern char * _getpty(int *, int, mode_t, int);
|
|
#endif
|
|
|
|
#if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY)
|
|
#if !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H)
|
|
/* BSDI does not supply a prototype for the 'openpty' and 'forkpty'
|
|
functions, even though they are included in libutil. */
|
|
#include <termios.h>
|
|
extern int openpty(int *, int *, char *, struct termios *, struct winsize *);
|
|
extern int forkpty(int *, char *, struct termios *, struct winsize *);
|
|
#endif /* !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) */
|
|
#endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */
|
|
|
|
|
|
/************************
|
|
* WRAPPER FOR <math.h> *
|
|
************************/
|
|
|
|
#ifndef HAVE_HYPOT
|
|
extern double hypot(double, double);
|
|
#endif
|
|
|
|
|
|
/* On 4.4BSD-descendants, ctype functions serves the whole range of
|
|
* wchar_t character set rather than single byte code points only.
|
|
* This characteristic can break some operations of string object
|
|
* including str.upper() and str.split() on UTF-8 locales. This
|
|
* workaround was provided by Tim Robbins of FreeBSD project.
|
|
*/
|
|
|
|
#ifdef __FreeBSD__
|
|
#include <osreldate.h>
|
|
#if __FreeBSD_version > 500039
|
|
#include <ctype.h>
|
|
#include <wctype.h>
|
|
#undef isalnum
|
|
#define isalnum(c) iswalnum(btowc(c))
|
|
#undef isalpha
|
|
#define isalpha(c) iswalpha(btowc(c))
|
|
#undef islower
|
|
#define islower(c) iswlower(btowc(c))
|
|
#undef isspace
|
|
#define isspace(c) iswspace(btowc(c))
|
|
#undef isupper
|
|
#define isupper(c) iswupper(btowc(c))
|
|
#undef tolower
|
|
#define tolower(c) towlower(btowc(c))
|
|
#undef toupper
|
|
#define toupper(c) towupper(btowc(c))
|
|
#endif
|
|
#endif
|
|
|
|
|
|
/* Declarations for symbol visibility.
|
|
|
|
PyAPI_FUNC(type): Declares a public Python API function and return type
|
|
PyAPI_DATA(type): Declares public Python data and its type
|
|
PyMODINIT_FUNC: A Python module init function. If these functions are
|
|
inside the Python core, they are private to the core.
|
|
If in an extension module, it may be declared with
|
|
external linkage depending on the platform.
|
|
|
|
As a number of platforms support/require "__declspec(dllimport/dllexport)",
|
|
we support a HAVE_DECLSPEC_DLL macro to save duplication.
|
|
*/
|
|
|
|
/*
|
|
All windows ports, except cygwin, are handled in PC/pyconfig.h.
|
|
|
|
BeOS and cygwin are the only other autoconf platform requiring special
|
|
linkage handling and both of these use __declspec().
|
|
*/
|
|
#if defined(__CYGWIN__) || defined(__BEOS__)
|
|
# define HAVE_DECLSPEC_DLL
|
|
#endif
|
|
|
|
/* only get special linkage if built as shared or platform is Cygwin */
|
|
#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__)
|
|
# if defined(HAVE_DECLSPEC_DLL)
|
|
# ifdef Py_BUILD_CORE
|
|
# define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE
|
|
# define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE
|
|
/* module init functions inside the core need no external linkage */
|
|
/* except for Cygwin to handle embedding (FIXME: BeOS too?) */
|
|
# if defined(__CYGWIN__)
|
|
# define PyMODINIT_FUNC __declspec(dllexport) void
|
|
# else /* __CYGWIN__ */
|
|
# define PyMODINIT_FUNC void
|
|
# endif /* __CYGWIN__ */
|
|
# else /* Py_BUILD_CORE */
|
|
/* Building an extension module, or an embedded situation */
|
|
/* public Python functions and data are imported */
|
|
/* Under Cygwin, auto-import functions to prevent compilation */
|
|
/* failures similar to http://python.org/doc/FAQ.html#3.24 */
|
|
# if !defined(__CYGWIN__)
|
|
# define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE
|
|
# endif /* !__CYGWIN__ */
|
|
# define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE
|
|
/* module init functions outside the core must be exported */
|
|
# if defined(__cplusplus)
|
|
# define PyMODINIT_FUNC extern "C" __declspec(dllexport) void
|
|
# else /* __cplusplus */
|
|
# define PyMODINIT_FUNC __declspec(dllexport) void
|
|
# endif /* __cplusplus */
|
|
# endif /* Py_BUILD_CORE */
|
|
# endif /* HAVE_DECLSPEC */
|
|
#endif /* Py_ENABLE_SHARED */
|
|
|
|
/* If no external linkage macros defined by now, create defaults */
|
|
#ifndef PyAPI_FUNC
|
|
# define PyAPI_FUNC(RTYPE) RTYPE
|
|
#endif
|
|
#ifndef PyAPI_DATA
|
|
# define PyAPI_DATA(RTYPE) extern RTYPE
|
|
#endif
|
|
#ifndef PyMODINIT_FUNC
|
|
# if defined(__cplusplus)
|
|
# define PyMODINIT_FUNC extern "C" void
|
|
# else /* __cplusplus */
|
|
# define PyMODINIT_FUNC void
|
|
# endif /* __cplusplus */
|
|
#endif
|
|
|
|
/* limits.h constants that may be missing */
|
|
|
|
#ifndef INT_MAX
|
|
#define INT_MAX 2147483647
|
|
#endif
|
|
|
|
#ifndef LONG_MAX
|
|
#if SIZEOF_LONG == 4
|
|
#define LONG_MAX 0X7FFFFFFFL
|
|
#elif SIZEOF_LONG == 8
|
|
#define LONG_MAX 0X7FFFFFFFFFFFFFFFL
|
|
#else
|
|
#error "could not set LONG_MAX in pyport.h"
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef LONG_MIN
|
|
#define LONG_MIN (-LONG_MAX-1)
|
|
#endif
|
|
|
|
#ifndef LONG_BIT
|
|
#define LONG_BIT (8 * SIZEOF_LONG)
|
|
#endif
|
|
|
|
#if LONG_BIT != 8 * SIZEOF_LONG
|
|
/* 04-Oct-2000 LONG_BIT is apparently (mis)defined as 64 on some recent
|
|
* 32-bit platforms using gcc. We try to catch that here at compile-time
|
|
* rather than waiting for integer multiplication to trigger bogus
|
|
* overflows.
|
|
*/
|
|
#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
* Hide GCC attributes from compilers that don't support them.
|
|
*/
|
|
#if (!defined(__GNUC__) || __GNUC__ < 2 || \
|
|
(__GNUC__ == 2 && __GNUC_MINOR__ < 7) ) && \
|
|
!defined(RISCOS)
|
|
#define Py_GCC_ATTRIBUTE(x)
|
|
#else
|
|
#define Py_GCC_ATTRIBUTE(x) __attribute__(x)
|
|
#endif
|
|
|
|
/*
|
|
* Add PyArg_ParseTuple format where available.
|
|
*/
|
|
#ifdef HAVE_ATTRIBUTE_FORMAT_PARSETUPLE
|
|
#define Py_FORMAT_PARSETUPLE(func,p1,p2) __attribute__((format(func,p1,p2)))
|
|
#else
|
|
#define Py_FORMAT_PARSETUPLE(func,p1,p2)
|
|
#endif
|
|
|
|
/* Eliminate end-of-loop code not reached warnings from SunPro C
|
|
* when using do{...}while(0) macros
|
|
*/
|
|
#ifdef __SUNPRO_C
|
|
#pragma error_messages (off,E_END_OF_LOOP_CODE_NOT_REACHED)
|
|
#endif
|
|
|
|
/*
|
|
* Older Microsoft compilers don't support the C99 long long literal suffixes,
|
|
* so these will be defined in PC/pyconfig.h for those compilers.
|
|
*/
|
|
#ifndef Py_LL
|
|
#define Py_LL(x) x##LL
|
|
#endif
|
|
|
|
#ifndef Py_ULL
|
|
#define Py_ULL(x) Py_LL(x##U)
|
|
#endif
|
|
|
|
#endif /* Py_PYPORT_H */
|