]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
bpo-33738: Fix macros which contradict PEP 384 (GH-7477)
authorChristian Tismer <tismer@stackless.com>
Sat, 9 Jun 2018 18:32:25 +0000 (20:32 +0200)
committerNed Deily <nad@python.org>
Sat, 9 Jun 2018 18:32:25 +0000 (14:32 -0400)
commitea62ce7f4fefc66bc0adba16bcd7666d5bbd5b44
tree5c7d457be8b067d4ca35d033308b0bc5da9817af
parent3f45f5da8eb052f1b54d37086c67b7094f35b67b
bpo-33738: Fix macros which contradict PEP 384 (GH-7477)

During development of the limited API support for PySide,
we saw an error in a macro that accessed a type field.

This patch fixes the 7 errors in the Python headers.
Macros which were not written as capitals were implemented
as function.

To do the necessary analysis again, a script was included that
parses all headers and looks for "->tp_" in serctions which can
be reached with active limited API.

It is easily possible to call this script as a test.

Error listing:

../../Include/objimpl.h:243
#define PyObject_IS_GC(o) (PyType_IS_GC(Py_TYPE(o)) && \
    (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o)))
Action: commented only

../../Include/objimpl.h:362
#define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0)
Action: commented only

../../Include/objimpl.h:364
#define PyObject_GET_WEAKREFS_LISTPTR(o) \
    ((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset))
Action: commented only

../../Include/pyerrors.h:143
#define PyExceptionClass_Name(x) \
     ((char *)(((PyTypeObject*)(x))->tp_name))
Action: implemented function

../../Include/abstract.h:593
#define PyIter_Check(obj) \
    ((obj)->ob_type->tp_iternext != NULL && \
     (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
Action: implemented function

../../Include/abstract.h:713
#define PyIndex_Check(obj)                              \
    ((obj)->ob_type->tp_as_number != NULL &&            \
     (obj)->ob_type->tp_as_number->nb_index != NULL)
Action: implemented function

../../Include/abstract.h:924
#define PySequence_ITEM(o, i)\
    ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
Action: commented only
Include/abstract.h
Include/objimpl.h
Include/pyerrors.h
Misc/NEWS.d/next/Core and Builtins/2018-06-07-18-34-19.bpo-33738.ODZS7a.rst [new file with mode: 0644]
Objects/abstract.c
Objects/exceptions.c
PC/python3.def
Tools/scripts/pep384_macrocheck.py [new file with mode: 0644]