Mercurial > hg-stable
changeset 11358:4494fb02d549
util.h: Utility macros for handling different Python APIs.
If we are in py3k, a IS_PY3K symbol is defined. Apart from that, byte strings
use the API defined in Python 2.6+ (_?PyBytes_.*). For Python < 2.6, the bytes
API is defined accordingly for mercurial usage (shameless copy from
bytesobject.h from Python's code). Some macros were backported from 2.6, as
inspired by rPath's pycompat.h.
author | Renato Cunha <renatoc@gmail.com> |
---|---|
date | Tue, 15 Jun 2010 19:49:56 -0300 |
parents | 7914628b4751 |
children | 4eaacccbb2ca |
files | mercurial/util.h |
diffstat | 1 files changed, 63 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/util.h Tue Jun 15 19:49:56 2010 -0300 @@ -0,0 +1,63 @@ +/* + util.h - utility functions for interfacing with the various python APIs. + + This software may be used and distributed according to the terms of + the GNU General Public License, incorporated herein by reference. +*/ + +#ifndef _HG_UTIL_H_ +#define _HG_UTIL_H_ + +#if PY_MAJOR_VERSION >= 3 + +#define IS_PY3K +#define PyInt_FromLong PyLong_FromLong + +#endif /* PY_MAJOR_VERSION */ + +/* Backports from 2.6 */ +#if PY_VERSION_HEX < 0x02060000 + +#define Py_TYPE(ob) (ob)->ob_type +#define Py_SIZE(ob) (ob)->ob_size +#define PyVarObject_HEAD_INIT(type, size) PyObject_HEAD_INIT(type) size, + +/* Shamelessly stolen from bytesobject.h */ +#define PyBytesObject PyStringObject +#define PyBytes_Type PyString_Type + +#define PyBytes_Check PyString_Check +#define PyBytes_CheckExact PyString_CheckExact +#define PyBytes_CHECK_INTERNED PyString_CHECK_INTERNED +#define PyBytes_AS_STRING PyString_AS_STRING +#define PyBytes_GET_SIZE PyString_GET_SIZE +#define Py_TPFLAGS_BYTES_SUBCLASS Py_TPFLAGS_STRING_SUBCLASS + +#define PyBytes_FromStringAndSize PyString_FromStringAndSize +#define PyBytes_FromString PyString_FromString +#define PyBytes_FromFormatV PyString_FromFormatV +#define PyBytes_FromFormat PyString_FromFormat +#define PyBytes_Size PyString_Size +#define PyBytes_AsString PyString_AsString +#define PyBytes_Repr PyString_Repr +#define PyBytes_Concat PyString_Concat +#define PyBytes_ConcatAndDel PyString_ConcatAndDel +#define _PyBytes_Resize _PyString_Resize +#define _PyBytes_Eq _PyString_Eq +#define PyBytes_Format PyString_Format +#define _PyBytes_FormatLong _PyString_FormatLong +#define PyBytes_DecodeEscape PyString_DecodeEscape +#define _PyBytes_Join _PyString_Join +#define PyBytes_Decode PyString_Decode +#define PyBytes_Encode PyString_Encode +#define PyBytes_AsEncodedObject PyString_AsEncodedObject +#define PyBytes_AsEncodedString PyString_AsEncodedString +#define PyBytes_AsDecodedObject PyString_AsDecodedObject +#define PyBytes_AsDecodedString PyString_AsDecodedString +#define PyBytes_AsStringAndSize PyString_AsStringAndSize +#define _PyBytes_InsertThousandsGrouping _PyString_InsertThousandsGrouping + +#endif /* PY_VERSION_HEX */ + +#endif /* _HG_UTIL_H_ */ +