diff -r 14c52bb996be Include/object.h --- a/Include/object.h Mon Oct 03 09:15:39 2016 -0700 +++ b/Include/object.h Mon Oct 03 14:02:26 2016 -0400 @@ -1069,6 +1069,65 @@ _PyObject_DebugTypeStats(FILE *out); #endif /* ifndef Py_LIMITED_API */ +/* Interface to map C struct members to Python object attributes */ + +/* An array of PyMemberDef structures defines the name, type and offset + of selected members of a C structure. These can be read by + PyMember_GetOne() and set by PyMember_SetOne() (except if their READONLY + flag is set). The array must be terminated with an entry whose name + pointer is NULL. */ + +typedef struct PyMemberDef { + char *name; + int type; + Py_ssize_t offset; + int flags; + char *doc; +} PyMemberDef; + +/* Types */ +#define PY_T_SHORT 0 +#define PY_T_INT 1 +#define PY_T_LONG 2 +#define PY_T_FLOAT 3 +#define PY_T_DOUBLE 4 +#define PY_T_STRING 5 +#define PY_T_OBJECT 6 +/* XXX the ordering here is weird for binary compatibility */ +#define PY_T_CHAR 7 /* 1-character string */ +#define PY_T_BYTE 8 /* 8-bit signed int */ +/* unsigned variants: */ +#define PY_T_UBYTE 9 +#define PY_T_USHORT 10 +#define PY_T_UINT 11 +#define PY_T_ULONG 12 + +/* Added by Jack: strings contained in the structure */ +#define PY_T_STRING_INPLACE 13 + +/* Added by Lillo: bools contained in the structure (assumed char) */ +#define PY_T_BOOL 14 + +#define PY_T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError + when the value is NULL, instead of + converting to None. */ +#define PY_T_LONGLONG 17 +#define PY_T_ULONGLONG 18 + +#define PY_T_PYSSIZET 19 /* Py_ssize_t */ +#define PY_T_NONE 20 /* Value is always None */ + + +/* Flags */ +#define PY_READONLY 1 +#define PY_READ_RESTRICTED 2 +#define PY_WRITE_RESTRICTED 4 +#define PY_RESTRICTED (PY_READ_RESTRICTED | PY_WRITE_RESTRICTED) + + +/* Current API, use this */ +PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *); +PyAPI_FUNC(int) PyMember_SetOne(char *, struct PyMemberDef *, PyObject *); #ifdef __cplusplus } #endif diff -r 14c52bb996be Include/structmember.h --- a/Include/structmember.h Mon Oct 03 09:15:39 2016 -0700 +++ b/Include/structmember.h Mon Oct 03 14:02:26 2016 -0400 @@ -1,74 +1,49 @@ #ifndef Py_STRUCTMEMBER_H #define Py_STRUCTMEMBER_H -#ifdef __cplusplus -extern "C" { -#endif +/* Deprecated header. For the interface to map C struct members to + Python object attributes, see object.h. */ -/* Interface to map C struct members to Python object attributes */ - +#include #include /* For offsetof */ -/* An array of PyMemberDef structures defines the name, type and offset - of selected members of a C structure. These can be read by - PyMember_GetOne() and set by PyMember_SetOne() (except if their READONLY - flag is set). The array must be terminated with an entry whose name - pointer is NULL. */ - -typedef struct PyMemberDef { - char *name; - int type; - Py_ssize_t offset; - int flags; - char *doc; -} PyMemberDef; -/* Types */ -#define T_SHORT 0 -#define T_INT 1 -#define T_LONG 2 -#define T_FLOAT 3 -#define T_DOUBLE 4 -#define T_STRING 5 -#define T_OBJECT 6 +/* Deprecated aliases for the member types */ +#define T_SHORT PY_T_SHORT +#define T_INT PY_T_INT +#define T_LONG PY_T_LONG +#define T_FLOAT PY_T_FLOAT +#define T_DOUBLE PY_T_DOUBLE +#define T_STRING PY_T_STRING +#define T_OBJECT PY_T_OBJECT /* XXX the ordering here is weird for binary compatibility */ -#define T_CHAR 7 /* 1-character string */ -#define T_BYTE 8 /* 8-bit signed int */ +#define T_CHAR PY_T_CHAR /* 1-character string */ +#define T_BYTE PY_T_BYTE /* 8-bit signed int */ /* unsigned variants: */ -#define T_UBYTE 9 -#define T_USHORT 10 -#define T_UINT 11 -#define T_ULONG 12 +#define T_UBYTE PY_T_UBYTE +#define T_USHORT PY_T_USHORT +#define T_UINT PY_T_UINT +#define T_ULONG PY_T_ULONG /* Added by Jack: strings contained in the structure */ -#define T_STRING_INPLACE 13 +#define T_STRING_INPLACE PY_T_STRING_INPLACE /* Added by Lillo: bools contained in the structure (assumed char) */ -#define T_BOOL 14 +#define T_BOOL PY_T_BOOL -#define T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError +#define T_OBJECT_EX PY_T_OBJECT_EX /* Like T_OBJECT, but raises AttributeError when the value is NULL, instead of converting to None. */ -#define T_LONGLONG 17 -#define T_ULONGLONG 18 +#define T_LONGLONG PY_T_LONGLONG +#define T_ULONGLONG PY_T_ULONGLONG -#define T_PYSSIZET 19 /* Py_ssize_t */ -#define T_NONE 20 /* Value is always None */ +#define T_PYSSIZET PY_T_PYSSIZET /* Py_ssize_t */ +#define T_NONE PY_T_NONE /* Value is always None */ /* Flags */ -#define READONLY 1 -#define READ_RESTRICTED 2 -#define PY_WRITE_RESTRICTED 4 -#define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED) - +#define READONLY PY_READONLY +#define READ_RESTRICTED PY_READ_RESTRICTED +#define RESTRICTED PY_RESTRICTED -/* Current API, use this */ -PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *); -PyAPI_FUNC(int) PyMember_SetOne(char *, struct PyMemberDef *, PyObject *); - - -#ifdef __cplusplus -} -#endif #endif /* !Py_STRUCTMEMBER_H */