bpo-40241: Add pycore_gc.h header file (GH-19494)

Move the PyGC_Head structure and the following private macros to the
internal C API:

* _PyGCHead_FINALIZED()
* _PyGCHead_NEXT()
* _PyGCHead_PREV()
* _PyGCHead_SET_FINALIZED()
* _PyGCHead_SET_NEXT()
* _PyGCHead_SET_PREV()
* _PyGC_FINALIZED()
* _PyGC_PREV_MASK
* _PyGC_PREV_MASK_COLLECTING
* _PyGC_PREV_MASK_FINALIZED
* _PyGC_PREV_SHIFT
* _PyGC_SET_FINALIZED()
* _PyObject_GC_IS_TRACKED()
* _PyObject_GC_MAY_BE_TRACKED()
* _Py_AS_GC(o)

Keep the private _PyGC_FINALIZED() macro in the public C API for
backward compatibility with Python 3.8: make it an alias to the new
PyObject_GC_IsFinalized() function.

Move the SIZEOF_PYGC_HEAD constant from _testcapi module to
_testinternalcapi module.
This commit is contained in:
Victor Stinner 2020-04-13 11:38:42 +02:00 committed by GitHub
parent 85dd6bb1f6
commit 0135598d72
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 98 additions and 62 deletions

View file

@ -10,6 +10,7 @@
#include "Python.h"
#include "pycore_initconfig.h" // _Py_GetConfigsAsDict()
#include "pycore_gc.h" // PyGC_Head
static PyObject *
@ -52,5 +53,19 @@ static struct PyModuleDef _testcapimodule = {
PyMODINIT_FUNC
PyInit__testinternalcapi(void)
{
return PyModule_Create(&_testcapimodule);
PyObject *module = PyModule_Create(&_testcapimodule);
if (module == NULL) {
return NULL;
}
if (PyModule_AddObject(module, "SIZEOF_PYGC_HEAD",
PyLong_FromSsize_t(sizeof(PyGC_Head))) < 0) {
goto error;
}
return module;
error:
Py_DECREF(module);
return NULL;
}