From f78b1c6573a7e4a30f799fd28acd414e5deb140d Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Sun, 2 Dec 2007 16:52:32 +0000 Subject: [PATCH] I've moved the remains of PyInt_ to the longobject.h header file and removed the inclusing of intobject.h from Python.h. Now the intobject.h exists only to provide some aliases for porters from Python 2.x. --- Doc/whatsnew/3.0.rst | 2 ++ Include/Python.h | 1 - Include/intobject.h | 62 ++++++++++++-------------------------------- Include/longobject.h | 9 +++++++ Makefile.pre.in | 3 ++- Misc/NEWS | 4 +++ 6 files changed, 34 insertions(+), 47 deletions(-) diff --git a/Doc/whatsnew/3.0.rst b/Doc/whatsnew/3.0.rst index 8d6babd99e5..aa7913cce44 100644 --- a/Doc/whatsnew/3.0.rst +++ b/Doc/whatsnew/3.0.rst @@ -387,6 +387,8 @@ changes to your code: * Everything is all in the details! +* Developers can include intobject.h after Python.h for some PyInt_ aliases. + .. ====================================================================== diff --git a/Include/Python.h b/Include/Python.h index d2bda8c5341..fef57b4d5e6 100644 --- a/Include/Python.h +++ b/Include/Python.h @@ -66,7 +66,6 @@ #include "bytesobject.h" #include "unicodeobject.h" -#include "intobject.h" #include "longobject.h" #include "longintrepr.h" #include "boolobject.h" diff --git a/Include/intobject.h b/Include/intobject.h index 09a522bca68..8385d34d9d4 100644 --- a/Include/intobject.h +++ b/Include/intobject.h @@ -1,18 +1,9 @@ +/* Integer object interface -/* Integer object interface */ - -/* -PyIntObject represents a (long) integer. This is an immutable object; -an integer cannot change its value after creation. - -There are functions to create new integer objects, to test an object -for integer-ness, and to get the integer value. The latter functions -returns -1 and sets errno to EBADF if the object is not an PyIntObject. -None of the functions should be applied to nil objects. - -The type PyIntObject is (unfortunately) exposed here so we can declare -_Py_TrueStruct and _Py_ZeroStruct in boolobject.h; don't use this. -*/ + This header files exists to make porting code to Python 3.0 easier. It + defines aliases from PyInt_* to PyLong_*. Only PyInt_GetMax() and + PyInt_CheckExact() remain in longobject.h. + */ #ifndef Py_INTOBJECT_H #define Py_INTOBJECT_H @@ -20,38 +11,19 @@ _Py_TrueStruct and _Py_ZeroStruct in boolobject.h; don't use this. extern "C" { #endif -/* -typedef struct { - PyObject_HEAD - long ob_ival; -} PyIntObject; +#warning "DeprecationWarning: intobject.h is going to be removed in 3.1" -PyAPI_DATA(PyTypeObject) PyInt_Type; -*/ - -#define PyInt_CheckExact(op) (PyLong_CheckExact(op) && _PyLong_FitsInLong(op)) - -#if 0 -# define PyInt_Check(op) PyLong_Check(op) -# define PyInt_FromString PyLong_FromString -# define PyInt_FromUnicode PyLong_FromUnicode -# define PyInt_FromLong PyLong_FromLong -# define PyInt_FromSize_t PyLong_FromSize_t -# define PyInt_FromSsize_t PyLong_FromSsize_t -# define PyInt_AsLong PyLong_AsLong -# define PyInt_AsSsize_t PyLong_AsSsize_t -# define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask -# define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask -# define PyInt_AS_LONG PyLong_AS_LONG -#endif - -PyAPI_FUNC(long) PyInt_GetMax(void); - -/* These aren't really part of the Int object, but they're handy; the protos - * are necessary for systems that need the magic of PyAPI_FUNC. - */ -PyAPI_FUNC(unsigned long) PyOS_strtoul(char *, char **, int); -PyAPI_FUNC(long) PyOS_strtol(char *, char **, int); +#define PyInt_Check(op) PyLong_Check(op) +#define PyInt_FromString PyLong_FromString +#define PyInt_FromUnicode PyLong_FromUnicode +#define PyInt_FromLong PyLong_FromLong +#define PyInt_FromSize_t PyLong_FromSize_t +#define PyInt_FromSsize_t PyLong_FromSsize_t +#define PyInt_AsLong PyLong_AsLong +#define PyInt_AsSsize_t PyLong_AsSsize_t +#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask +#define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask +#define PyInt_AS_LONG PyLong_AS_LONG #ifdef __cplusplus } diff --git a/Include/longobject.h b/Include/longobject.h index 688b4e4200c..5740f98deba 100644 --- a/Include/longobject.h +++ b/Include/longobject.h @@ -14,6 +14,7 @@ PyAPI_DATA(PyTypeObject) PyLong_Type; #define PyLong_Check(op) \ PyType_FastSubclass(Py_Type(op), Py_TPFLAGS_LONG_SUBCLASS) #define PyLong_CheckExact(op) (Py_Type(op) == &PyLong_Type) +#define PyInt_CheckExact(op) (PyLong_CheckExact(op) && _PyLong_FitsInLong(op)) PyAPI_FUNC(PyObject *) PyLong_FromLong(long); PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long); @@ -30,6 +31,8 @@ PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *); cleanup to keep the extra information. [CH] */ #define PyLong_AS_LONG(op) PyLong_AsLong(op) +PyAPI_FUNC(long) PyInt_GetMax(void); + /* Used by socketmodule.c */ #if SIZEOF_SOCKET_T <= SIZEOF_LONG #define PyLong_FromSocket_t(fd) PyLong_FromLong((SOCKET_T)(fd)) @@ -127,6 +130,12 @@ PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, appending a base prefix of 0[box] if base is 2, 8 or 16. */ PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *aa, int base); +/* These aren't really part of the long object, but they're handy. The + functions are in Python/mystrtoul.c. + */ +PyAPI_FUNC(unsigned long) PyOS_strtoul(char *, char **, int); +PyAPI_FUNC(long) PyOS_strtol(char *, char **, int); + #ifdef __cplusplus } #endif diff --git a/Makefile.pre.in b/Makefile.pre.in index a5afe335a0e..3cf41a655b8 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -546,6 +546,7 @@ PYTHON_HEADERS= \ Include/asdl.h \ Include/abstract.h \ Include/boolobject.h \ + Include/bytes_methods.h \ Include/bytesobject.h \ Include/ceval.h \ Include/classobject.h \ @@ -563,10 +564,10 @@ PYTHON_HEADERS= \ Include/formatter_unicode.h \ Include/funcobject.h \ Include/import.h \ - Include/intobject.h \ Include/intrcheck.h \ Include/iterobject.h \ Include/listobject.h \ + Include/longintrepr.h \ Include/longobject.h \ Include/memoryobject.h \ Include/methodobject.h \ diff --git a/Misc/NEWS b/Misc/NEWS index 0fb28ad84c7..465026a470b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -50,6 +50,10 @@ Core and Builtins removed and im_func + im_self are renamed to __func__ and __self__. The factory PyMethod_New takes only func and instance as argument. +- intobject.h is no longer included by Python.h. The remains were moved + to longobject.h. It still exists to define several aliases from PyInt_ + to PyLong_ functions. + Extension Modules -----------------