mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Issue #17162: Add PyType_GetSlot.
This commit is contained in:
parent
83bdfa08f7
commit
ca7b04644c
6 changed files with 30 additions and 2 deletions
|
@ -97,3 +97,13 @@ Type Objects
|
||||||
types. This allows the caller to reference other heap types as base types.
|
types. This allows the caller to reference other heap types as base types.
|
||||||
|
|
||||||
.. versionadded:: 3.3
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
|
.. c:function:: void* PyType_GetSlot(PyTypeObject *type, int slot)
|
||||||
|
|
||||||
|
Return the function pointer stored int the given slot. If the
|
||||||
|
result is *NULL*, this indicates that either the slot is *NULL*,
|
||||||
|
or that the function was called with invalid parameters.
|
||||||
|
Callers will typically cast the result pointer into the appropriate
|
||||||
|
function type.
|
||||||
|
|
||||||
|
.. versionadded:: 3.4
|
||||||
|
|
|
@ -439,6 +439,9 @@ PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*);
|
||||||
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*);
|
PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*);
|
||||||
#endif
|
#endif
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
|
||||||
|
PyAPI_FUNC(void*) PyType_GetSlot(PyTypeObject*, int);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef Py_LIMITED_API
|
#ifndef Py_LIMITED_API
|
||||||
/* The *real* layout of a type object when allocated on the heap */
|
/* The *real* layout of a type object when allocated on the heap */
|
||||||
|
|
|
@ -10,6 +10,8 @@ Release date: 2014-02-09
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #17162: Add PyType_GetSlot.
|
||||||
|
|
||||||
- Issue #20162: Fix an alignment issue in the siphash24() hash function which
|
- Issue #20162: Fix an alignment issue in the siphash24() hash function which
|
||||||
caused a crash on PowerPC 64-bit (ppc64).
|
caused a crash on PowerPC 64-bit (ppc64).
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ static void
|
||||||
Xxo_dealloc(XxoObject *self)
|
Xxo_dealloc(XxoObject *self)
|
||||||
{
|
{
|
||||||
Py_XDECREF(self->x_attr);
|
Py_XDECREF(self->x_attr);
|
||||||
PyObject_Del(self);
|
((freefunc)PyType_GetSlot(Py_TYPE(self), Py_tp_free))(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
|
@ -2641,6 +2641,19 @@ PyType_FromSpec(PyType_Spec *spec)
|
||||||
return PyType_FromSpecWithBases(spec, NULL);
|
return PyType_FromSpecWithBases(spec, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
PyType_GetSlot(PyTypeObject *type, int slot)
|
||||||
|
{
|
||||||
|
if (!PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) {
|
||||||
|
PyErr_BadInternalCall();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (slot >= Py_ARRAY_LENGTH(slotoffsets)) {
|
||||||
|
/* Extension module requesting slot from a future version */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return *(void**)(((char*)type) + slotoffsets[slot]);
|
||||||
|
}
|
||||||
|
|
||||||
/* Internal API to look for a name through the MRO.
|
/* Internal API to look for a name through the MRO.
|
||||||
This returns a borrowed reference, and doesn't set an exception! */
|
This returns a borrowed reference, and doesn't set an exception! */
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -1539,7 +1539,7 @@ class PyBuildExt(build_ext):
|
||||||
|
|
||||||
if 'd' not in sys.abiflags:
|
if 'd' not in sys.abiflags:
|
||||||
ext = Extension('xxlimited', ['xxlimited.c'],
|
ext = Extension('xxlimited', ['xxlimited.c'],
|
||||||
define_macros=[('Py_LIMITED_API', 1)])
|
define_macros=[('Py_LIMITED_API', '0x03040000')])
|
||||||
self.extensions.append(ext)
|
self.extensions.append(ext)
|
||||||
|
|
||||||
return missing
|
return missing
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue