• Christian Tismer's avatar
    bpo-33738: Fix macros which contradict PEP 384 (GH-7477) · ea62ce7f
    Christian Tismer yazdı
    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
    ea62ce7f
pep384_macrocheck.py 4.61 KB